1

我有一个这样的哈希数组:

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可以重新排序或可以有其他键。我只是最小化了这个例子。

4

2 回答 2

4

尝试select

valids = arr.select { |hash| hash[:valid] }
emails = valids.map { |hash| hash[:email] }
于 2019-03-08T16:11:04.690 回答
1

只是为了有另一种方式:

arr.collect { |h| h[:email] if h[:valid] }.compact
#=> ["prathab@hotmail.in", "hello@hotmail.in"]
于 2019-03-08T20:24:15.487 回答