搜索键在Rails中嵌套散列
问题描述:
我有以下的对象捕获嵌套的哈希值(从Ominauth-Facebook)的所谓myAuth
搜索键在Rails中嵌套散列
<Ominauth::AuthHash credentials
extra=#<Hashie:: Mash
raw_info=#<Hashie::Mash email="[email protected]">>>
我想提取电子邮件,所以我用:
myAuth['extra']['raw_info']['email']
但是,我想搜索整个散列并获得键email
的值而不知道确切的散列结构。我应该怎么做呢?
谢谢。
答
不知道这是否是最好的解决办法,但我会做到:如果该键存在或假
h = {seal: 5, test: 3, answer: { nested: "damn", something: { email: "yay!" } } }
def search_hash(h, search)
return h[search] if h.fetch(search, false)
h.keys.each do |k|
answer = search_hash(h[k], search) if h[k].is_a? Hash
return answer if answer
end
false
end
puts search_hash(h, :email)
这将返回值。
[在包含任意数量的嵌套散列和数组的散列内深入查找键/值对]的可能重复(http://stackoverflow.com/questions/8301566/find-key-value-pairs-deep-inside -a-hash-containing-an-any-number-of-nested) – deefour 2013-02-22 19:27:55
谢谢Deefour。我会投票结束这个。 – AdamNYC 2013-02-22 20:03:40