如何检索哈希的所有(嵌套)键?

时间:2013-12-10 22:38:28

标签: ruby

如何检索Ruby中的Hash中的所有键,也是嵌套的键。应忽略重复项,例如

{ a: 3, b: { b: 2, b: { c: 5 } } }.soberize
=> [:a, :b, :c]

最快的实施是什么?

2 个答案:

答案 0 :(得分:2)

简单的递归解决方案:

def recursive_keys(data)
  data.keys + data.values.map{|value| recursive_keys(value) if value.is_a?(Hash) }
end

def all_keys(data)
  recursive_keys(data).flatten.compact.uniq
end 

用法:

all_keys({ a: 3, b: { b: 2, b: { c: 5 } } })
=> [:a, :b, :c]

答案 1 :(得分:1)

递归方法怎么样?

def nested_keys(hash, array)
  if hash.is_a?(Hash)
    array |= hash.keys
    hash.keys.map do |key|
      array = nested_keys(hash[key], array)
    end
  end
  array
end