我正在尝试在服务之间移动数据,并且需要从包含散列和数组的大记录中删除重复出现的散列。
从记录的每个部分中删除的哈希是
{
"description": "simple identifier",
"name": "id",
"type": "id"
},
下面是示例数据:
{"stuff": { "defs": [
{
"description": "simple identifiery",
"name": "id",
"type": "id"
},
{
"name": "aDate",
"type": "date"
},
{
"defs": [
{
"description": "simple identifier",
"name": "id",
"type": "id"
},
{
"case-sensitive": true,
"length": null,
"name": "Id",
"type": "string"
},
{
"name": "anotherDate",
"type": "dateTime"
}
],
},
{
"defs": [
{
"description": "simple identifier",
"name": "id",
"type": "id"
},
……还有很多……
我创建了几个递归函数来删除元素,但我留下了一个空哈希“{}”。我也尝试删除父级,但发现我删除了哈希父级而不是哈希本身。
我很确定我可以创建一个新的哈希并用我想要的数据填充它,但必须有办法做到这一点。
我不在 Rails 中工作,我想避免使用 rails gems。
我通过更仔细地查看数据结构发现了这一点。需要删除的元素总是在一个数组中,所以在递归之前检查哈希键/值是否存在,如果存在则删除。我相信这可以更好地编码,所以让我知道你的想法。
def recursive_delete!(node, key, value)
if node.is_a?(Array)
node.delete_if { |elm| elm[key] == value }
node.each do |elm|
recursive_delete!(elm, key, value)
end
elsif node.is_a?(Hash)
node.each_value do |v|
recursive_delete!(v, key, value)
end
end
end