Rubyeach_with_object: примеры и руководство по использованию

Метод «each_with_object» — это перечислимый метод Ruby, который выполняет итерацию по коллекции и накапливает результат на основе заданного объекта. Вот несколько примеров использования «each_with_object» с кодом:

Пример 1. Подсчет вхождений элементов в массив

fruits = ['apple', 'banana', 'orange', 'banana', 'apple']
result = fruits.each_with_object(Hash.new(0)) { |fruit, counts| counts[fruit] += 1 }
# Output: {"apple"=>2, "banana"=>2, "orange"=>1}

Пример 2. Группировка элементов по определенному критерию

numbers = [1, 2, 3, 4, 5, 6]
result = numbers.each_with_object({ even: [], odd: [] }) do |number, groups|
  groups[number.even? ? :even : :odd] << number
end
# Output: {:even=>[2, 4, 6], :odd=>[1, 3, 5]}

Пример 3. Создание хеша из массива

colors = ['red', 'green', 'blue']
result = colors.each_with_object({}) { |color, hash| hash[color] = color.upcase }
# Output: {"red"=>"RED", "green"=>"GREEN", "blue"=>"BLUE"}

Пример 4. Накопление суммы из массива

numbers = [1, 2, 3, 4, 5]
result = numbers.each_with_object(0) { |number, sum| sum += number }
# Output: 15

Пример 5. Сбор уникальных элементов из массива

numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
result = numbers.each_with_object([]) { |number, unique| unique << number unless unique.include?(number) }
# Output: [1, 2, 3, 4]