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

Какой самый быстрый способ в Ruby получить первый перечислимый элемент, для которого блок возвращает true?

Какой самый быстрый способ в Ruby получить первый перечислимый элемент, для которого блок возвращает true?

Например:

arr = [12, 88, 107, 500]
arr.select {|num| num > 100 }.first  # => 107

Я бы хотел сделать это без пробега всего массива, поскольку select будет, так как мне нужно только первое совпадение.

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

4b9b3361

Ответ 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, который вы используете, когда получаете все из них.

Не идеальное сравнение, но может быть достаточно, чтобы помочь запомнить.