我在一个名为myAuth
的对象中捕获了以下嵌套哈希(来自Ominauth Facebook)
<Ominauth::AuthHash credentials
extra=#<Hashie:: Mash
raw_info=#<Hashie::Mash email="myemail@gmail.com">>>
我想提取电子邮件,所以我使用:
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)
如果键存在或为false,这将返回值。