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