通过匹配条件从哈希数组中获取电子邮件作为数组

时间:2019-03-08 16:06:24

标签: ruby-on-rails ruby

我有一系列这样的哈希值:

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

注意emailvalid可以重新排序,也可以与其他键一起使用。我只是最小化了这个例子。

2 个答案:

答案 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"]