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