Руби одну строку кода, прерывая блок - PullRequest
1 голос
/ 12 февраля 2012

Я пытаюсь написать одну строку кода, чтобы сказать мне, есть ли элемент в массиве, который соответствует набору критериев и затем переходит в true.

Например,

У меня есть [1,2,3,4,5,6,7,8,9,10,11,12], и я хочу найти первый элемент, который делится на 2 и 3. Я хочу написать один вкладыш, который вернет true, как только оннажимает 6 и не обрабатывает оставшиеся элементы в массиве.

Я могу написать для каждого цикла и разрыва, но я чувствую, что должен быть способ сделать это в одной строке кода.

Ответы [ 2 ]

5 голосов
/ 12 февраля 2012

any? * * 1004

[1,2,3,4,5,6,7,8,9,10,11,12].any?{|e| e % 2 == 0 && e % 3 == 0}

или вы можете объединить его с all? и получить отличный учебный пример:

[1,2,3,4,5,6,7,8,9,10,11,12].any?{|e| [2, 3].all?{|d| e % d == 0}}

И если вам действительно нужно вернуть первый соответствующий элемент, используйте find:

[1,2,3,4,5,6,7,8,9,10,11,12].find{|e| [2,3].all?{|d| e % d == 0}}
# => 6 
4 голосов
/ 12 февраля 2012

Вы должны использовать: найти

[1,2,3,4,5,6,7,8,9,10,11,12].find{|e| e % 2 == 0 && e % 3 == 0}

Возвращает 6 и не обрабатывает значения после 6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...