0
我正试图在服务之间移动数据,并且需要从包含哈希和数组的大型记录中删除重复散列。Ruby:删除大型嵌套数据结构中的重复散列
哈希从记录的每个部分删除是
{
"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"
},
...其它更多....
我创建了几个递归函数删除元素,但我留下了一个空的哈希'{}'。我也尝试删除父项,但发现我删除了散列父项,而不是散列本身。
我敢肯定,我可以创建一个新的散列并填充我想要的数据,但必须有一种方法来做到这一点。
我不在铁轨工作,并希望避免使用铁轨宝石。
我通过仔细观察数据结构来了解这一点。需要删除的元素总是在数组中,因此在递归之前检查散列键/值是否存在,如果是,则删除。我确信这可以更好地编码,让我知道你的想法。
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
如果你发布了你写的代码 – lmars
你会删除给定散列的*所有匹配项*,或除第一个匹配项以外的所有匹配* *?它会一直是哈希中的数组的一部分?数据结构是否有任何限制? – lurker