Подтвердить что ты не робот

Первый элемент массива с условием

Есть ли более короткий способ найти первый элемент в массиве, удовлетворяющий некоторым условиям, чем это:

my_array[ my_array.index {|x| x.some_test} ]
4b9b3361

Ответ 1

Попробуйте следующее:

my_array.find{|x| x.some_test }

Или здесь ярлык (спасибо @LarsHaugseth для напоминания об этом)

my_array.find(&:some_test)

Ответ 2

Как мне кажется, звучит сбивает с толку. Поскольку я ожидаю получить более одного объекта для такого запроса.

Я предпочитаю использовать detect для получения отличного от него.

И select для нахождения всех из них.

Вот что говорит о них ruby ​​docs:

detect(ifnone = nil) {| obj | block } → obj or nil click to toggle source 
find(ifnone = nil) {| obj | block } → obj or nil 
detect(ifnone = nil) → an_enumerator 
find(ifnone = nil) → an_enumerator

Пропускает каждую запись в перечислении для блокировки. Возвращает первый, для которого блок не является ложным. Если объект не соответствует, вызывает ifnone и возвращает его результат, когда он указан, или возвращает иначе.

find_all {| obj | block } → array click to toggle source
select {| obj | block } → array
find_all → an_enumerator
select → an_enumerator

Возвращает массив, содержащий все элементы перечисления, для которых блок не является ложным