In Ruby, qual è il modo più espressivo per mappare un array in modo tale che alcuni elementi vengano modificati e gli altri rimasti intatti?Mappare un array modificando solo gli elementi che corrispondono a una determinata condizione
questo è un modo straight-forward per farlo:
old_a = ["a", "b", "c"] # ["a", "b", "c"]
new_a = old_a.map { |x| (x=="b" ? x+"!" : x) } # ["a", "b!", "c"]
Tralasciando il caso "leave-alone", naturalmente, se non basta:
new_a = old_a.map { |x| x+"!" if x=="b" } # [nil, "b!", nil]
Quello che vorrei è qualcosa di simile questo:
new_a = old_a.map_modifying_only_elements_where (Proc.new {|x| x == "b"})
do |y|
y + "!"
end
# ["a", "b!", "c"]
c'è qualche bel modo per fare questo in Ruby (o forse Rails ha un qualche tipo di metodo comodo che non ho ancora trovato)?
Grazie a tutti per aver risposto. Mentre tu mi hai convinto collettivamente che è meglio usare solo map
con l'operatore ternario, alcuni di voi hanno postato risposte molto interessanti!
Penso che la cosa #map sia valida così com'è. ;-) –
Sì, sono d'accordo. Puoi togliere i paren se questo ti fa piacere di più! –
Chiuso? FTL. Guarda il mio post = P –