Donc, je parcourt une plage comme celle-ci:
(1..100).each do |n|
# n = 1
# n = 2
# n = 3
# n = 4
# n = 5
end
Mais ce que je voudrais faire, c'est itérer par 10.
Donc au lieu d’augmenter n
de 1, le prochain n
serait en réalité 10, puis 20, 30, etc.
Voir http://Ruby-doc.org/core/classes/Range.html#M000695 pour l'API complète.
En gros, vous utilisez la méthode step()
. Par exemple:
(10..100).step(10) do |n|
# n = 10
# n = 20
# n = 30
# ...
end
Vous pouvez utiliser Numeric#step
.
0.step(30,5) do |num|
puts "number is #{num}"
end
# >> number is 0
# >> number is 5
# >> number is 10
# >> number is 15
# >> number is 20
# >> number is 25
# >> number is 30
rng.step(n=1) {| obj | block } => rng
Itère sur rng, en passant chaque nième élément au bloc. Si la plage contient des nombres ou des chaînes, l'ordre naturel est utilisé. Sinon, step appelle success pour parcourir les éléments de la plage. Le code suivant utilise la classe X, définie dans la documentation de niveau classe.
range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}
produit:
1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx
Référence: http://Ruby-doc.org/core/classes/Range.html
......
Voici une autre façon, peut-être plus familière, de le faire:
for i in (0..10).step(2) do
puts i
end