如何检索Ruby中的Hash中的所有键,也是嵌套的键。应忽略重复项,例如
{ a: 3, b: { b: 2, b: { c: 5 } } }.soberize
=> [:a, :b, :c]
最快的实施是什么?
答案 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