我有一系列这样的哈希值:
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
答案 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