Menu
Coddy logo textTech

Reduce / Inject

Fa parte della sezione Logica e flusso del percorso Ruby di Coddy. Lezione 23 di 56.

A volte devi ridurre un intero array a un singolo valore: una somma, un prodotto, la stringa più lunga. reduce (chiamato anche inject: stesso metodo, due nomi) è lo strumento giusto.

Il blocco accetta due parametri: l'accumulatore e l'elemento corrente. Il valore restituito dal blocco diventa l'accumulatore successivo.

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

Passo dopo passo, l'accumulatore è 0 → 1 → 3 → 6 → 10.

Il primo argomento è il valore iniziale dell’accumulatore. Se lo ometti, Ruby usa il primo elemento dell’array:

[1, 2, 3, 4].reduce { |acc, n| acc * n }   # 24

Per operazioni semplici come la somma e il prodotto, Ruby ti offre una scorciatoia: passa un simbolo invece di un blocco:

[1, 2, 3, 4].reduce(:+)   # 10
[1, 2, 3, 4].reduce(:*)   # 24

Una volta che sai creare un accumulatore personalizzato, puoi calcolare quasi tutto in un solo passaggio.

challenge icon

Sfida

Facile

Leggi un elenco di numeri interi separati da virgole. Stampa tre righe:

  1. La somma (usa reduce(:+))
  2. Il prodotto (usa reduce(:*))
  3. Il massimo, calcolato con reduce e un blocco esplicito, non usando max.

Per l'input 2,5,3,8, l'output è:

18
240
8

Provalo tu

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: stampa la somma, il prodotto e il massimo (con reduce + un blocco esplicito)
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Ruby online