Ruby Academy · leksjon

reduce og each_with_object

Aggreger samlinger

Leksjon 4 av 413 trinn

reduce og each_with_object er en gratis leksjon i Ruby Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Ruby Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Ruby Academy inneholder totalt 4 leksjoner.

Hva er reduce?

reduce (aliaset inject) kombinerer alle elementene til én enkelt verdi. Blokken mottar en akkumulator og det gjeldende elementet.

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

Slik fungerer akkumulatoren

Akkumulatoren fører med seg det løpende resultatet mellom iterasjonene. Det blokken returnerer, blir den neste akkumulatoren.

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

reduce uten startverdi

Uten en startverdi blir det første elementet akkumulatoren, og iterasjonen starter med det andre elementet.

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

reduce med et symbol

For enkle operatorer kan De oppgi et symbol som :+ eller :* i stedet for en blokk.

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

Finne en maksimumsverdi

reduce kan beregne mer enn summer, for eksempel den største verdien.

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

Bygge en streng

Akkumulatoren kan være av hvilken som helst type, også en streng som De bygger opp trinn for trinn.

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

Hva er each_with_object?

each_with_object fungerer omtrent som reduce, men De gir metoden et muterbart objekt som returneres automatisk. Objektet endres inne i blokken.

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

Bygge en hash

each_with_object egner seg perfekt til å bygge hasher, fordi De ikke trenger å returnere objektet hver gang.

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

Telle forekomster

Kombiner en hash med standardverdi med each_with_object for å telle elementer.

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

reduce versus each_with_object

Bruk reduce når hvert trinn returnerer en ny verdi (summer, produkter). Bruk each_with_object når De endrer én beholder (arrays, hasher).

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

tally-forkortelsen

For telling har Ruby en innebygd tally-metode som gjør jobben for Dem.

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

Hurtigsjekk

Sjekk ferdighetene Deres i aggregering.

Oppsummering

De kan nå aggregere samlinger:

  • reduce/inject med akkumulator, startverdi eller symbol
  • each_with_object for å bygge arrays og hasher
  • tally for rask opptelling
  • velg reduce for nye verdier og each_with_object for muterbare beholdere

Neste kurs: tall og matematikk.

puts (1..5).reduce(:*)
Gratis å komme i gang

Lær deg Ruby med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
29
Leksjoner
109

Ofte stilte spørsmål

Er leksjonen «reduce og each_with_object» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Ruby Academy, inkludert «reduce og each_with_object», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Ruby Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «reduce og each_with_object»?

Aggreger samlinger Du øver på Ruby Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Ruby Academy?

Ingen tidligere erfaring er nødvendig. Ruby Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «reduce og each_with_object»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Ruby Academy-leksjonen?

Ja. Alle Ruby Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Opprette intervaller
  2. Enumerable-modulen
  3. map, select, reject
  4. reduce og each_with_object
← Tilbake til Ruby Academy