迭代嵌套哈希中的每个键

时间:2015-05-11 22:49:47

标签: ruby hash

是否有一种简单的方法来迭代嵌套哈希中的每个键。我有一个大的json,我只想要某些键的值,无论它们处于什么级别。他们的父母是谁也无关紧要。寻找直线的方法迭代每个键并返回等于特定字符串的键的值。

1 个答案:

答案 0 :(得分:2)

module HashNestedGet
  refine Hash do
    def nested_get(key)
      return fetch(key) if has_key?(key)
      each do |subkey, subval|
        if Hash === subval
          result = subval.nested_get(key)
          return result if result
        end
      end
      nil        
    end
  end
end

a = { b: 1, c: { d: { e: 2 } } }
using HashNestedGet
require 'pp'
pp a.nested_get(:b)
# => 1
pp a.nested_get(:e)
# => 2
pp a.nested_get(:d)
# => nil

(作为细化发布,因此在irb中不起作用;如果需要,可以很容易地生成普通函数)