Метод injectв Ruby также известен как reduce. Это Enumerable метод, который позволяет накапливать значение путем применения двоичной операции к каждому элементу коллекции. Накопленное значение переносится вперед и используется в качестве заметки для следующей итерации.
Основной синтаксис injectследующий:
collection.inject(initial_value) { |memo, element| block }
Вот что представляет собой каждая часть синтаксиса:
коллекция: это перечислимая коллекция, над которой вы хотите выполнить операцию.initial_value: это необязательный аргумент, который устанавливает начальное значение для заметки. Если он не указан, в качестве начального значения используется первый элемент коллекции.memo: представляет собой накопленное значение. В каждой итерации результат предыдущей итерации сохраняется в переменнойmemo.element: представляет текущий элемент итерируемой коллекции.block: эта операция применяется к каждому элементу. Он принимаетmemoиelementв качестве аргументов и возвращает обновленныйmemoдля следующей итерации.
Вот пример, демонстрирующий использование inject:
numbers = [1, 2, 3, 4, 5]
sum = numbers.inject(0) { |memo, num| memo + num }
puts sum
# Output: 15
В приведенном выше примере injectиспользуется для вычисления суммы всех элементов в массиве numbers. Начальное значение устанавливается равным 0, и блок добавляет каждый элемент в заметку. Наконец, выводится результат — 15.
Помимо inject, Ruby предоставляет несколько других широко используемых перечисляемых методов. Вот несколько дополнительных методов:
map: применяет блок кода к каждому элементу коллекции и возвращает новый массив с результатами.select: он фильтрует элементы из коллекции на основе условия, указанного в блоке, и возвращает новый массив с выбранными элементами.each: он перебирает каждый элемент коллекции и применяет блок кода.find: возвращает первый элемент коллекции, соответствующий условию, указанному в блоке.sort: сортирует элементы коллекции на основе сравнения, указанного в блоке, и возвращает новый отсортированный массив.