Модуль Enumerable
в Ruby предоставляет набор методов для работы с коллекциями, которые можно перебирать. Он является одним из ключевых модулей в Ruby и включается в классы, которые реализуют метод #each
.
Итерация по элементам
Методы each
, each_with_index
, reverse_each
позволяют перебирать элементы коллекции.
[1, 2, 3].each { |x| puts x * 2 }
#=> 2
#=> 4
#=> 6
Фильтрация и поиск
Методы select
, reject
, find
, detect
, filter
помогают находить элементы по условию.
[1, 2, 3, 4].select { |x| x.even? }
#=> [2, 4]
Преобразование коллекций
Методы map
(или collect
), flat_map
применяют блок к каждому элементу и возвращают новую коллекцию.
[1, 2, 3].map { |x| x * x }
#=> [1, 4, 9]
Агрегация и сводные данные
Методы reduce
(или inject
), sum
, max
, min
, count
позволяют вычислять агрегированные значения.
[1, 2, 3].reduce(0) { |sum, x| sum + x }
#=> 6
Группировка и сортировка
Методы group_by
, sort_by
, partition
помогают организовывать данные.
['apple', 'banana', 'cherry'].group_by { |s| s.length }
#=> {5=>["apple"], 6=>["banana", "cherry"]}
Ленивые вычисления
Метод lazy
позволяет откладывать вычисления до момента, когда результат действительно нужен.
(1..Float::INFINITY).lazy.select(&:even?).first(5)
#=> [2, 4, 6, 8, 10]
#each
(Array, Hash, Range и даже пользовательские классы).find
прекращает поиск после первого совпадения).Резюмируем: Enumerable
— это мощный инструмент для работы с коллекциями, который предоставляет десятки методов для итерации, фильтрации, преобразования и агрегации данных. Его использование делает код более чистым, выразительным и эффективным.