1

次のネストされたハッシュ(Ominauth-Facebookから)がというオブジェクトにキャプチャされていますmyAuth

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

メールを抽出したいので、以下を使用します。

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

emailただし、正確なハッシュ構造を知らなくても、ハッシュ全体を検索してキーの値を取得したいと思います。どうすればいいですか?

ありがとうございました。

4

1 に答える 1

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)

キーが存在するかfalseの場合、これは値を返します。

于 2013-02-22T19:30:50.160 に答える