Понимание метода «inject» в Ruby: накопление значений в перечислимых коллекциях

Метод 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: сортирует элементы коллекции на основе сравнения, указанного в блоке, и возвращает новый отсортированный массив.