0

私はハッシュのハッシュで構成されるparamsハッシュを持っています、そして時々、それらのハッシュは電子メールを持っています。すべてのメールを取得するための最良の方法は何ですか?パラメータは3レベルより深い場合があります。私は各パラメータを通過するところまでしか到達していませんが、ネストされた検索を行う方法を理解できません

params = {
  :email => 'foo@bar.com', 
  :name => 'foo bar',
  '0' => {
    :name => 'My Name',
    :email => 'my@name.com',
    '0' => {
      :name => 'Another Name',
      :email => 'another@name.com'
    }
  }
}
4

2 に答える 2

1

少しハックですが、次のことができます(テストされていません)。配列でそれらが必要な場合は、メソッドの外部でインスタンス変数を宣言し、代わりにそれを使用することができますputs v

def get_email(hash)
  hash.each do |k,v|
    if v.is_a?(Hash)
      get_email v
    elsif k.to_sym == :email
      puts v
    end 
  end 
end
于 2013-02-27T14:39:46.650 に答える
0

クラスにモンキーパッチを適用すると、次のHashようになります。

class Hash
  def find_all key  
    self.map { |k, v|
      v.is_a?(Hash) ? v.find_all(key) : (v if k.to_sym == key.to_sym) 
    }.flatten.compact    
  end  
end  
# ⇒ nil

> params.find_all :email
# ⇒ [
#  [0] "foo@bar.com",
#  [1] "my@name.com",
#  [2] "another@name.com"
# ]
于 2013-02-27T16:38:33.197 に答える