如何通过Ruby中的特定步骤迭代反转范围?

use*_*348 14 ruby iteration range

我可以像这样迭代

(0..10).step(2){|v| puts v}
Run Code Online (Sandbox Code Playgroud)

但是,由于反转范围等于空范围,我无法以这种方式迭代

(10..0).step(2){|v| puts v}
Run Code Online (Sandbox Code Playgroud)

它什么都没赚到我.当然,我可以这样迭代

10.downto(0){|v| puts v}
Run Code Online (Sandbox Code Playgroud)

但是downto方法不允许我设置除默认1之外的其他步骤.这是非常基本的东西,所以我想应该有一个内置的方法来做到这一点,我不知道.

the*_*Man 22

你为什么不用Numeric#step:

来自文档:

使用从num开始的数字序列调用块,在每次调用时按步长(默认值1)递增.当要传递给块的值大于限制(如果步为正)或小于限制(如果步为负)时,循环结束.如果所有参数都是整数,则循环使用整数计数器进行操作.如果任何参数是浮点数,则所有参数都转换为浮点数,并且循环执行floor(n + n*epsilon)+ 1次,其中n =(limit - num)/ step.否则,循环从num开始,使用<或>运算符将计数器与限制进行比较,并使用+运算符递增自身.

irb(main):001:0> 10.step(0, -2) { |i| puts i }
10
8
6
4
2
0

  • 好的。我也找到了另一种方法,虽然不太优雅:(-10..0).step(2){|v| 放置 -1*v} (2认同)