Какой самый быстрый способ в Ruby получить первый перечислимый элемент, для которого блок возвращает true?
Какой самый быстрый способ в Ruby получить первый перечислимый элемент, для которого блок возвращает true?
Например:
arr = [12, 88, 107, 500]
arr.select {|num| num > 100 }.first # => 107
Я бы хотел сделать это без пробега всего массива, поскольку select
будет, так как мне нужно только первое совпадение.
Я знаю, что могу сделать each
и прервать успех, но я думал, что для этого есть собственный метод; Я просто не нашел его в документации.
Ответы
Ответ 1
Несколько основных классов ruby, включая Array
и Hash
, включают модуль Enumerable
, который предоставляет множество полезных методов для работы с этими перечислениями.
Этот модуль предоставляет методы find
или detect
, которые делают именно то, что вы хотите достичь:
arr = [12, 88, 107, 500]
arr.find { |num| num > 100 } # => 107
Оба имени метода являются синонимами друг к другу и делают то же самое.
Ответ 2
arr[arr.index {|num| num > 100 }] #=> 107
Ответ 3
arr.find{|el| el>100} #107 (or detect; it in the Enumerable module.)
Ответ 4
Я вспоминаю это, используя образ ActiveRecord.find, который дает вам первую запись, и ActiveRecord.select, который вы используете, когда получаете все из них.
Не идеальное сравнение, но может быть достаточно, чтобы помочь запомнить.