Ruby: Как перебрать диапазон, но с заданным шагом? - PullRequest
141 голосов
/ 03 декабря 2010

Итак, я перебираю диапазон таким образом:

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

Но то, что я хотел бы сделать, это перебирать до 10-х.на 1 следующее n будет на самом деле 10, затем 20, 30 и т. д. и т. д.

Ответы [ 4 ]

234 голосов
/ 03 декабря 2010

См. http://ruby -doc.org / core / classes / Range.html # M000695 для получения полного API.

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

(10..100).step(10) do |n|
    # n = 10
    # n = 20
    # n = 30
    # ...
end
9 голосов
/ 25 февраля 2014

Вы можете использовать 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
5 голосов
/ 03 декабря 2010
rng.step(n=1) {| obj | block } => rng

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

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

......

4 голосов
/ 12 марта 2014

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

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