reduce e each_with_object
Aggregare le raccolte
reduce e each_with_object è una lezione Ruby Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Ruby Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ruby Academy include 4 lezioni in totale.
Che cos'è reduce?
reduce (alias inject) combina tutti gli elementi in un unico valore. Il blocco riceve un accumulatore e l'elemento corrente.
sum = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts sumCome funziona l'accumulatore
L'accumulatore conserva il risultato parziale tra un'iterazione e l'altra. Qualunque valore restituito dal blocco diventa il successivo accumulatore.
[1, 2, 3].reduce(0) do |acc, n|
puts "acc=#{acc} n=#{n}"
acc + n
endreduce senza valore iniziale
Senza un valore iniziale, il primo elemento diventa l'accumulatore e l'iterazione inizia dal secondo.
puts [10, 20, 30].reduce { |acc, n| acc + n }reduce con un simbolo
Per gli operatori semplici, passi un simbolo come :+ o :* invece di un blocco.
puts [1, 2, 3, 4].reduce(:+)
puts [1, 2, 3, 4].reduce(:*)Trovare il valore massimo
reduce può calcolare risultati diversi dalle somme, ad esempio il valore più grande.
nums = [3, 9, 2, 7]
max = nums.reduce { |acc, n| n > acc ? n : acc }
puts maxCreare una stringa
L'accumulatore può essere di qualsiasi tipo, inclusa una stringa che costruisce progressivamente.
letters = ["r", "u", "b", "y"]
word = letters.reduce("") { |acc, c| acc + c.upcase }
puts wordChe cos'è each_with_object?
each_with_object è simile a reduce, ma gli si fornisce un oggetto mutabile che viene restituito automaticamente. L'oggetto viene modificato all'interno del blocco.
result = [1, 2, 3].each_with_object([]) do |n, arr|
arr << n * 2
end
puts result.inspectCreare un hash
each_with_object è perfetto per creare hash, perché non è necessario restituire l'oggetto ogni volta.
words = ["apple", "pear"]
lengths = words.each_with_object({}) do |w, h|
h[w] = w.length
end
puts lengthsContare le occorrenze
Combini un hash con valore predefinito con each_with_object per contare gli elementi.
votes = ["a", "b", "a", "a"]
tally = votes.each_with_object(Hash.new(0)) do |v, h|
h[v] += 1
end
puts tallyreduce e each_with_object a confronto
Utilizzi reduce quando ogni passaggio restituisce un nuovo valore (somme, prodotti). Utilizzi each_with_object quando modifica un unico contenitore (array, hash).
puts [1, 2, 3].reduce(:+)
puts [1, 2, 3].each_with_object([]) { |n, a| a << n }.inspectLa scorciatoia tally
Per i conteggi, Ruby offre il metodo integrato tally, che esegue il lavoro al posto Suo.
puts ["a", "b", "a"].tallyVerifica rapida
Verifichi le Sue competenze nell'aggregazione.
Riepilogo
Ora sa aggregare le raccolte:
reduce/injectcon accumulatore, valore iniziale o simboloeach_with_objectper creare array e hashtallyper conteggi rapidi- scelga reduce per i nuovi valori ed each_with_object per i contenitori mutabili
Corso successivo: numeri e matematica.
puts (1..5).reduce(:*)Domande Frequenti
La lezione «reduce e each_with_object» è gratuita?
Sì — il testo completo di «reduce e each_with_object» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Ruby Academy, passa a CoddyKit PRO. Il corso Ruby Academy include 4 lezioni in totale.
Cosa imparerò in «reduce e each_with_object»?
Aggregare le raccolte Eserciti Ruby Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Ruby Academy?
Non è richiesta alcuna esperienza precedente. Ruby Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «reduce e each_with_object»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Ruby Academy?
Sì. Ogni lezione Ruby Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Creare intervalli
- Il modulo Enumerable
- map, select, reject
- reduce e each_with_object