Ruby Academy · Lektion

reduce och each_with_object

Aggreggera samlingar.

Lektion 4 av 413 steg

reduce och each_with_object är en gratis lektion i Ruby Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Ruby Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Ruby Academy innehåller totalt 4 lektioner.

Vad är reduce?

reduce (aliasen inject) kombinerar alla element till ett enda värde. Blocket får en ackumulator och det aktuella elementet.

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

Så fungerar ackumulatorn

Ackumulatorn innehåller det löpande resultatet mellan iterationerna. Det som blocket returnerar blir nästa ackumulator.

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

reduce utan startvärde

Utan ett startvärde blir det första elementet ackumulator, och iterationen börjar med det andra elementet.

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

reduce med en symbol

För enkla operatorer kan Ni ange en symbol som :+ eller :* i stället för ett block.

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

Hitta ett maximum

reduce kan beräkna mer än summor, till exempel det största värdet.

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

Bygga en sträng

Ackumulatorn kan vara av vilken typ som helst, även en sträng som Ni bygger upp.

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

Vad är each_with_object?

each_with_object fungerar ungefär som reduce, men Ni skickar med ett föränderligt objekt som returneras automatiskt. Ni ändrar objektet inuti blocket.

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

Bygga en hash

each_with_object passar perfekt när Ni bygger hashar, eftersom Ni inte behöver returnera objektet varje gång.

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

Räkna förekomster

Kombinera en hash med standardvärde och each_with_object för att räkna förekomster.

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

reduce jämfört med each_with_object

Använd reduce när varje steg returnerar ett nytt värde, till exempel summor och produkter. Använd each_with_object när Ni ändrar en behållare, till exempel arrayer och hashar.

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

Genvägen tally

För räkning har Ruby den inbyggda metoden tally, som utför arbetet åt Er.

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

Snabbtest

Testa era kunskaper om aggregering.

Sammanfattning

Nu kan Ni aggregera samlingar:

  • reduce/inject med ackumulator, startvärde eller symbol
  • each_with_object för att bygga arrayer och hashar
  • tally för att snabbt räkna förekomster
  • välj reduce för nya värden och each_with_object för föränderliga behållare

Nästa kurs: tal och matematik.

puts (1..5).reduce(:*)
Gratis att börja

Lär dig Ruby med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
29
Lektioner
109

Vanliga frågor

Är lektionen ”reduce och each_with_object” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Ruby Academy, inklusive ”reduce och each_with_object”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Ruby Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”reduce och each_with_object”?

Aggreggera samlingar. Ni övar på Ruby Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Ruby Academy?

Du behöver inga förkunskaper. Utbildningen i Ruby Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”reduce och each_with_object”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Ruby Academy-lektionen?

Ja. Varje Ruby Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Skapa intervall
  2. Modulen Enumerable
  3. map, select, reject
  4. reduce och each_with_object
← Tillbaka till Ruby Academy