我有一系列这样的哈希值:
arr = [
{ email: 'prathab@hotmail.in', valid: true },
{ email: 'another@gmail.com', valid: false },
{ email: 'hello@hotmail.in', has_many: 10, valid: true}
]
我需要通过valid: true
获取电子邮件列表。
预期结果:
=> ["prathab@hotmail.in", "hello@hotmail.in"]
# another@gmail.com is not in the list because it's valid is false.
如何在不使用each
循环的情况下检查数组中的此类哈希?
目前我正在这样做:
found = []
arr.each do|v|
if v[:valid] == true
found << v[:email]
end
end
注意:email
和valid
可以重新排序,也可以与其他键一起使用。我只是最小化了这个例子。
答案 0 :(得分:4)
尝试使用select
:
valids = arr.select { |hash| hash[:valid] }
emails = valids.map { |hash| hash[:email] }
答案 1 :(得分:1)
仅仅是一种替代方法:
arr.collect { |h| h[:email] if h[:valid] }.compact
#=> ["prathab@hotmail.in", "hello@hotmail.in"]