在Rails中搜索嵌套哈希中的键

时间:2013-02-22 19:05:15

标签: ruby-on-rails hash

我在名为myAuth的对象中捕获了以下嵌套哈希(来自Ominauth-Facebook)

<Ominauth::AuthHash credentials 
                     extra=#<Hashie:: Mash 
                     raw_info=#<Hashie::Mash email="myemail@gmail.com">>>

我想提取电子邮件,所以我使用:

myAuth['extra']['raw_info']['email']

但是,我想在不知道确切的哈希结构的情况下搜索整个哈希值并获取键email的值。我应该怎么做呢?

谢谢。

1 个答案:

答案 0 :(得分:4)

不知道这是否是最佳解决方案,但我会这样做:

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)

如果密钥存在或返回,则返回值。