Dus ik herhaal een reeks als volgt:
(1..100).each do |n|
# n = 1
# n = 2
# n = 3
# n = 4
# n = 5
end
Maar wat ik zou willen doen, is herhalen met tienden.
Dus in plaats van n
met 1 te verhogen, zou de volgende n
eigenlijk 10 zijn, dan 20, 30, enz.
Antwoord 1, autoriteit 100%
Zie http://ruby-doc.org/core/classes/Range .html#M000695voor de volledige API.
In principe gebruik je de step()
methode. Bijvoorbeeld:
(10..100).step(10) do |n|
# n = 10
# n = 20
# n = 30
# ...
end
Antwoord 2, autoriteit 5%
Je kunt 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
Antwoord 3, autoriteit 3%
Hier is een andere, misschien meer vertrouwd ogende manier om het te doen:
for i in (0..10).step(2) do
puts i
end
Antwoord 4, autoriteit 2%
rng.step(n=1) {| obj | block } => rng
Itereert over rng, waarbij elk n-de element aan het blok wordt doorgegeven. Als het bereik getallen of tekenreeksen bevat, wordt natuurlijke volgorde gebruikt. Anders roept stap succ op om door bereikelementen te itereren. De volgende code gebruikt klasse Xs, die is gedefinieerd in de documentatie op klasseniveau.
range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}
produceert:
1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx
Referentie: http://ruby-doc.org/core/classes/Range. html
……