在嵌套哈希中查找子项的父项

时间:2014-12-12 06:34:42

标签: ruby json

我有一个嵌套的哈希,如下所示,我想找到使用ruby的特定孩子的父级。

例如,我想找到“field3”的父级:123(12345是父级,如果我的符号令人困惑)

[
{
  "12345": [
    {
      "entry_id": 543,
      "field1": "value",
      "field2": "other value",
      "field3": 123
    },
    {
      "entry_id": 544,
      "field1": "something",
      "field2": "something else",
      "field3": 456
    }
  ],
  "23456": [
    {
      "entry_id": 545,
      "field1": "new value",
      "field2": "other new value",
      "field3": 789
    },
    {
      "entry_id": 546,
      "field1": "something!",
      "field2": "something else!",
      "field3": 012
    }
  ]
}
]

我可以迭代哈希并打印我想要的父级,但有更有效的方法吗?

我已经查看了其他一些答案,我发现了这段代码here

def dfs(obj, &blk)
  return enum_for(:dfs, obj) unless blk      
  yield obj if obj.is_a? Hash
  if obj.is_a?(Hash) || obj.is_a?(Array)
    obj.each do |*a|
      dfs(a.last, &blk)
    end
  end
end


def find_node_with_value(obj, key, value)
  dfs(obj).select do |node|
    node[key].respond_to?(:include?) && node[key].include?(value)
  end
end

当然,上面的代码只能帮助我找到子节点。如何找到我正在寻找的特定孩子的父母?

0 个答案:

没有答案