检查是否包含另一个哈希值

时间:2019-01-18 11:29:11

标签: ruby

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

arr = [
  { email: 'prathab@hotmail.in', valid: true },
  { email: 'another@mail.com', valid: false }
]

我需要检查email: 'prathab@hotmail.in'valid: true是否都在单个哈希中。

如何在不使用each循环的情况下检查数组中的此类哈希?

目前我正在这样做:

found = false
arr.each do|v|
  if v[:email] == 'prathab@hotmail.in' && v[:valid] == true
    found = true
    break
  end
end

2 个答案:

答案 0 :(得分:7)

您可以使用Enumerable#any?来实现或多或少地执行您的实现:

> found = arr.any?{|e| e[:email] == 'prathab@hotmail.in' && e[:valid] }
=> true

答案 1 :(得分:7)

要检查哈希是否具有另一个哈希具有的所有键值对,请使用><或它们的变体>=<=。您可以放心,键值对的顺序无关紧要。

arr.any?{|h| h >= {email: "prathab@hotmail.in", valid: true}}
# => true

arr.any?{|h| h >= {valid: true, email: "prathab@hotmail.in"}}
# => true