reduce og each_with_object
Aggregér collections
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 sumSå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
endreduce 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 maxOpbygning 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 wordHvad 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.inspectOpbygning 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 lengthsOptæ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 tallyreduce 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 }.inspecttally-genvejen
Til optælling har Ruby en indbygget tally-metode, der gør arbejdet for dig.
puts ["a", "b", "a"].tallyHurtigt tjek
Tjek dine færdigheder i aggregering.
Opsummering
Du kan nu aggregere samlinger:
reduce/injectmed akkumulator, startværdi eller symboleach_with_objecttil opbygning af arrays og hashestallytil 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(:*)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
- Oprettelse af ranges
- Enumerable-modulet
- map, select, reject
- reduce og each_with_object