Ruby:如何遍历一个范围,但以设定的增量进行迭代?


156

所以我在这样的范围内进行迭代:

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

但是我想做的是迭代10。

因此,代替增加n1,下一个n实际上是10,然后是20、30,依此类推。



@DiegoDias但这是最好的,然后是那个线程
Jackson Jegatheesan

Answers:



12

您可以使用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

6

这是另一种可能看起来更熟悉的方法:

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

10
抱歉,但是红宝石样式指南强烈建议不要使用for循环。
Darth Egregious 2015年

@DarthEgregious为什么?
道格

它是所有事物都是对象,每个动作都是方法调用的哲学的延伸。因此for,您应该使用each方法而不是使用内置的与循环。
Darth Egregious

5
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

......

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.