Ответ 1
Попробуйте следующее:
my_array.find{|x| x.some_test }
Или здесь ярлык (спасибо @LarsHaugseth для напоминания об этом)
my_array.find(&:some_test)
Есть ли более короткий способ найти первый элемент в массиве, удовлетворяющий некоторым условиям, чем это:
my_array[ my_array.index {|x| x.some_test} ]
Попробуйте следующее:
my_array.find{|x| x.some_test }
Или здесь ярлык (спасибо @LarsHaugseth для напоминания об этом)
my_array.find(&:some_test)
Как мне кажется, звучит сбивает с толку. Поскольку я ожидаю получить более одного объекта для такого запроса.
Я предпочитаю использовать 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
Возвращает массив, содержащий все элементы перечисления, для которых блок не является ложным