如何更改循环内的步长值?

时间:2014-10-27 13:37:24

标签: ruby loops

我想在每次循环迭代中增加我的步长值,但我的解决方案无效。

n=1
(0..100).step(n) do |x|
 puts x
 n+=1 
end

有没有办法改变" n"或者我必须使用" while loop"或其他什么?

5 个答案:

答案 0 :(得分:7)

我假设您正在尝试打印1,3,6,10,15,21等

step documentation说:

  

迭代范围,将每个第n个元素传递给块。如果范围   包含数字,每次迭代都会添加n。

因此,您尝试做的事情不能用step完成。 while或传统for循环应该可以解决问题。

答案 1 :(得分:3)

这是基于Enumerator的自定义Aurélien Bottazini's answer

tri = Enumerator.new do |y|
  n = 0
  step = 1
  loop do
    y << n
    n = n + step
    step += 1
  end
end

tri.take(10)
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

tri.take_while { |i| i < 100 }
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91]

答案 2 :(得分:2)

我认为做你想做的最好的方法是使用while循环。

step = 1
last = 100
i = 0
while (i < last )
    puts i
    step += 1
    i += step
end

有可能通过步骤来完成它,但它需要你完全理解它是如何工作的,并且可能使用一些hacky东西来使它工作。但是,如果您已经有了一个简单的解决方案,为什么要这样做呢?

答案 3 :(得分:2)

我会使用loopbreak

来完成
n = 0
step = 1
loop do
  puts n
  n = n + step
  step += 1
  break if n > 100
end

答案 4 :(得分:0)

我认为你现在要问的是,我现在再次看一下,正在改变step方法给出的step内的论据。这是不可能的,因为在步骤可以继续执行其运行给定块的工作之前评估步骤的参数,并分配块变量x