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

MonkeypatchingHash类会是这样的:

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 回答