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 sumJak 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
endreduce 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 maxTworzenie 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 wordCzym 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.inspectTworzenie 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 lengthsZliczanie 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 tallyreduce 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 }.inspectSkrót tally
Do zliczania Ruby ma wbudowaną metodę tally, która wykonuje całą pracę automatycznie.
puts ["a", "b", "a"].tallySzybki test
Proszę sprawdzić swoje umiejętności agregowania danych.
Podsumowanie
Potrafią już Państwo agregować kolekcje:
reduce/injectz akumulatorem, wartością początkową lub symbolemeach_with_objectdo tworzenia tablic i haszytallydo 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
- Tworzenie zakresów
- Moduł Enumerable
- map, select, reject
- reduce i each_with_object