Ruby Academy · Lektion

reduce og each_with_object

Aggregér collections

Lektion 4 af 413 trin

reduce og each_with_object er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.

Hvad er reduce?

reduce (alias inject) kombinerer alle elementer til én værdi. Blokken modtager en akk kumulator og det aktuelle element.

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

Sådan fungerer akkumulatoren

Akkumulatoren bærer det løbende resultat mellem iterationerne. Det, blokken returnerer, bliver den næste akkumulator.

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

reduce uden startværdi

Uden en startværdi bliver det første element til akkumulatoren, og iterationen starter med det andet.

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

reduce med et symbol

For simple operatorer kan du angive et symbol som :+ eller :* i stedet for en blok.

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

Beregning af et maksimum

reduce kan beregne mere end summer, f.eks. den største værdi.

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

Opbygning af en streng

Akkumulatoren kan være af enhver type, også en streng, som du bygger op.

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

Hvad er each_with_object?

each_with_object minder om reduce, men du giver metoden et foranderligt objekt, som automatisk returneres. Du ændrer objektet inde i blokken.

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

Opbygning af et hash

each_with_object er perfekt til at opbygge hashes, fordi du ikke behøver at returnere objektet hver gang.

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

Optælling af forekomster

Kombiner et hash med en standardværdi med each_with_object for at tælle elementer.

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

reduce kontra each_with_object

Brug reduce, når hvert trin returnerer en ny værdi (summer, produkter). Brug each_with_object, når du ændrer én beholder (arrays, hashes).

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

tally-genvejen

Til optælling har Ruby en indbygget tally-metode, der gør arbejdet for dig.

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

Hurtigt tjek

Tjek dine færdigheder i aggregering.

Opsummering

Du kan nu aggregere samlinger:

  • reduce/inject med akkumulator, startværdi eller symbol
  • each_with_object til opbygning af arrays og hashes
  • tally til hurtig optælling
  • vælg reduce til nye værdier og each_with_object til foranderlige beholdere

Næste kursus: tal og matematik.

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

Lær Ruby med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
29
Lektioner
109

Ofte stillede spørgsmål

Er lektionen “reduce og each_with_object” gratis?

Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “reduce og each_with_object”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “reduce og each_with_object”?

Aggregér collections Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Ruby Academy?

Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “reduce og each_with_object”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Ruby Academy-lektion?

Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Oprettelse af ranges
  2. Enumerable-modulet
  3. map, select, reject
  4. reduce og each_with_object
← Tilbage til Ruby Academy