Ruby: как перебирать диапазон, но с заданным шагом?

поэтому я повторяю по диапазону так:

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end

но то, что я хотел бы сделать, это повторить на 10.

Так вместо увеличения n на 1, следующий n фактически будет 10, затем 20, 30 и т. д.

4 ответов


см.http://ruby-doc.org/core/classes/Range.html#M000695 для полного API.

в основном вы используете step() метод. Например:

(10..100).step(10) do |n|
    # n = 10
    # n = 20
    # n = 30
    # ...
end

можно использовать 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

перебирает rng, передавая каждый N-й элемент в блок. Если диапазон содержит числа или строки, используется естественный порядок. В противном случае step вызывает succ для итерации по элементам диапазона. В следующем коде используется класс Xs, определенный в документации уровня класса.

range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}

выдает:

1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx

ссылка:http://ruby-doc.org/core/classes/Range.html

......


вот еще один, возможно, более знакомый способ сделать это:

for i in (0..10).step(2) do
    puts i
end