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
......