0Pricing
Ruby Academy · Lekcja

reduce i each_with_object

Agregowanie kolekcji

reduce i each_with_object to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Czym jest reduce?

reduce (alias inject) łączy wszystkie elementy w jedną wartość. Blok otrzymuje akumulator i bieżący element.

sum = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts sum

Jak działa akumulator

Akumulator przechowuje bieżący wynik między iteracjami. To, co zwróci blok, staje się następnym akumulatorem.

[1, 2, 3].reduce(0) do |acc, n|
  puts "acc=#{acc} n=#{n}"
  acc + n
end

reduce bez wartości początkowej

Bez wartości początkowej pierwszy element staje się akumulatorem, a iteracja rozpoczyna się od drugiego elementu.

puts [10, 20, 30].reduce { |acc, n| acc + n }

reduce z symbolem

W przypadku prostych operatorów proszę przekazać symbol, taki jak :+ lub :*, zamiast bloku.

puts [1, 2, 3, 4].reduce(:+)
puts [1, 2, 3, 4].reduce(:*)

Znajdowanie maksimum

reduce może obliczać nie tylko sumy, ale także inne wartości, na przykład największą wartość.

nums = [3, 9, 2, 7]
max = nums.reduce { |acc, n| n > acc ? n : acc }
puts max

Tworzenie napisu

Akumulator może mieć dowolny typ, w tym typ napisu, który jest stopniowo budowany.

letters = ["r", "u", "b", "y"]
word = letters.reduce("") { |acc, c| acc + c.upcase }
puts word

Czym jest each_with_object?

each_with_object działa podobnie jak reduce, ale przekazuje mu się modyfikowalny obiekt, który jest automatycznie zwracany. Obiekt zmienia się wewnątrz bloku.

result = [1, 2, 3].each_with_object([]) do |n, arr|
  arr << n * 2
end
puts result.inspect

Tworzenie hasza

each_with_object świetnie nadaje się do tworzenia haszy, ponieważ nie trzeba zwracać obiektu przy każdej iteracji.

words = ["apple", "pear"]
lengths = words.each_with_object({}) do |w, h|
  h[w] = w.length
end
puts lengths

Zliczanie wystąpień

Proszę połączyć hasz z wartością domyślną z each_with_object, aby zliczać elementy.

votes = ["a", "b", "a", "a"]
tally = votes.each_with_object(Hash.new(0)) do |v, h|
  h[v] += 1
end
puts tally

reduce a each_with_object

Proszę użyć reduce, gdy każdy krok zwraca nową wartość (sumy, iloczyny). Proszę użyć each_with_object, gdy modyfikowany jest jeden kontener (tablice, hasze).

puts [1, 2, 3].reduce(:+)
puts [1, 2, 3].each_with_object([]) { |n, a| a << n }.inspect

Skrót tally

Do zliczania Ruby ma wbudowaną metodę tally, która wykonuje całą pracę automatycznie.

puts ["a", "b", "a"].tally

Szybki test

Proszę sprawdzić swoje umiejętności agregowania danych.

Podsumowanie

Potrafią już Państwo agregować kolekcje:

  • reduce/inject z akumulatorem, wartością początkową lub symbolem
  • each_with_object do tworzenia tablic i haszy
  • tally do szybkiego zliczania
  • reduce służy do tworzenia nowych wartości, a each_with_object do modyfikowania kontenerów

Następny kurs: liczby i matematyka.

puts (1..5).reduce(:*)

Często zadawane pytania

Czy lekcja „reduce i each_with_object” jest bezpłatna?

Tak — pełny tekst „reduce i each_with_object” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „reduce i each_with_object”?

Agregowanie kolekcji Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „reduce i each_with_object”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?

Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie zakresów
  2. Moduł Enumerable
  3. map, select, reject
  4. reduce i each_with_object
← Powrót do Ruby Academy