我有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'
}
}
}
答案 0 :(得分:1)
有点hackish但你可以做以下(未经测试)。如果您需要在数组中使用它们,则可以在方法外声明一个实例变量,只需使用它代替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
答案 1 :(得分:0)
Monkeypatching 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"
# ]