Получать электронные письма в виде массива из массива хэшей по соответствующим критериям - PullRequest
1 голос
/ 08 марта 2019

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

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 можно переупорядочить или иметь вместе с ними другие ключи. Я просто свернул пример.

Ответы [ 2 ]

4 голосов
/ 08 марта 2019

Попробуйте с select:

valids = arr.select { |hash| hash[:valid] }
emails = valids.map { |hash| hash[:email] }
1 голос
/ 08 марта 2019

Просто для альтернативного пути:

arr.collect { |h| h[:email] if h[:valid] }.compact
#=> ["prathab@hotmail.in", "hello@hotmail.in"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...