0Pricing
Ruby Academy · Lezione

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 sum

Come 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
end

reduce 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 max

Creare 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 word

Che 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.inspect

Creare 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 lengths

Contare 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 tally

reduce 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 }.inspect

La scorciatoia tally

Per i conteggi, Ruby offre il metodo integrato tally, che esegue il lavoro al posto Suo.

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

Verifica rapida

Verifichi le Sue competenze nell'aggregazione.

Riepilogo

Ora sa aggregare le raccolte:

  • reduce/inject con accumulatore, valore iniziale o simbolo
  • each_with_object per creare array e hash
  • tally per 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

  1. Creare intervalli
  2. Il modulo Enumerable
  3. map, select, reject
  4. reduce e each_with_object
← Torna a Ruby Academy