Проверка на включение хеша против другого хеша - PullRequest
0 голосов
/ 18 января 2019

У меня есть такой массив хэшей:

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 голосов
/ 18 января 2019

Чтобы проверить, есть ли в хэше все пары ключ-значение, которые есть у другого хеша, используйте >, < или их варианты >=, <=. Вы можете быть уверены, что порядок пар ключ-значение не имеет значения.

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

arr.any?{|h| h >= {valid: true, email: "prathab@hotmail.in"}}
# => true
0 голосов
/ 18 января 2019

Вы можете использовать Enumerable#any?, который делает более или менее то, что вы сделали в своей реализации:

> found = arr.any?{|e| e[:email] == 'prathab@hotmail.in' && e[:valid] }
=> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...