检查是否包含对另一个哈希的哈希

Pra*_*tha 3 ruby

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

arr = [
  { email: 'prathab@hotmail.in', valid: true },
  { email: 'another@mail.com', valid: false }
]
Run Code Online (Sandbox Code Playgroud)

我需要检查是否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
Run Code Online (Sandbox Code Playgroud)

mrz*_*asa 7

您可以使用Enumerable#any?或多或少地执行您在实现中执行的操作:

> found = arr.any?{|e| e[:email] == 'prathab@hotmail.in' && e[:valid] }
=> true
Run Code Online (Sandbox Code Playgroud)


saw*_*awa 7

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

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

arr.any?{|h| h >= {valid: true, email: "prathab@hotmail.in"}}
# => true
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,对于rtfm的漂亮版本,@ sawa ;-) (4认同)