La ** méthode à chaque ** est un processus itératif bien connu pour le rubis, mais chacune n'est pas toujours la meilleure.
Pour certains modèles, il peut être plus facile à implémenter en utilisant une méthode différente. Cette fois, je vais vous présenter comment écrire de manière simplifiée pour chaque motif.
Nous utiliserons la méthode map
.
#Pour chaque
list = (1..5).to_a
list_double = []
list.each do |i|
list_doubule << i * 2
end
p list_double # [2, 4, 6, 8, 10]
#Pour la carte
list = (1..5).to_a
list_double = list.map{ |i| i* 2 }
p list_double # [2, 4, 6, 8, 10]
#Pour chaque
array = ["a", "b", "c"]
array_up = []
array.each do |i|
array_up << i.upcase
end
p array_up # ["A", "B", "C"]
#Pour la carte
array = ["a", "b", "c"]
array_up = array.map(&:upcase)
p array_up # ["A", "B", "C"]
.map{ |i| i.upcase }
Est en outre omis
Nous utiliserons la méthode ʻinject (valeur initiale) `.
#Pour chaque
list = (1..5).to_a
sum = 0
list.each do |i|
sum += i
end
p sum # 15
#En cas d'injection
list = (1..5).to_a
sum = list.inject(0){|i, j| i += j}
p sum # 15
Recommended Posts