Iteratori și Modulul Enumerable în Ruby: each, map, select, reject și reduce în Ruby

Ghid complet pentru modulul Enumerable în Ruby: transformarea colecțiilor cu each, map, select, reject, reduce/inject și scurtătura &:to_s.

Sintaxă
numere.map(&:to_s) | note.select { |n| n >= 5 } | preturi.sum

Modulul Enumerable este unul dintre cele mai admirate componente ale limbajului Ruby. Orice clasă care implementează metoda each primește automat zeci de metode funcționale de căutare, filtrare, transformare și agregare.

Pipeline de transformare a unei colecții în Ruby
note_elevi = [4, 7, 10, 5, 3, 8, 9, 6]

# 1. Filtrare cu select (păstrează doar notele de trecere):
note_promovate = note_elevi.select { |nota| nota >= 5 }
puts "Note promovate: #{note_promovate.inspect}" # [7, 10, 5, 8, 9, 6]

# 2. Respingere cu reject (elimină notele mari):
note_mici = note_elevi.reject { |nota| nota >= 5 }
puts "Note sub 5: #{note_mici.inspect}" # [4, 3]

# 3. Transformare cu map (crește fiecare notă cu 1 punct, max 10):
note_ajustate = note_elevi.map { |nota| [nota + 1, 10].min }
puts "Note ajustate: #{note_ajustate.inspect}"

# 4. Scurtătura Symbol#to_proc (&:nume_metoda):
cuvinte = ["bucuresti", "cluj", "iasi", "timisoara"]
orase_mari = cuvinte.map(&:capitalize)
puts "Orașe capitalizate: #{orase_mari.join(', ')}"

# 5. Agregare totală cu reduce (inject):
suma_totala = note_elevi.reduce(0) { |total, n| total + n }
puts "Suma notelor: #{suma_totala}"