Ruby: Hoe herhaal je een bereik, maar in vaste stappen?

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 nmet 1 te verhogen, zou de volgende neigenlijk 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

……

Other episodes