Ruby 带条件增量的For循环

Ruby 带条件增量的For循环,ruby,loops,Ruby,Loops,我想要一个根据条件递增的for循环。循环通常应将其索引i增加1,但如果满足某些条件i==20,则应将i的值设置为50,跳过21-49。伪代码如下所示: for(i = 0; i < 100;) if i == 20 i = 50 else i = i++ end end 如何实现这一点?由于需要根据递增的I变量重新评估条件,可以使用while语句: i = 0 while i < 100 do if i == 20 i = 50

我想要一个根据条件递增的for循环。循环通常应将其索引i增加1,但如果满足某些条件i==20,则应将i的值设置为50,跳过21-49。伪代码如下所示:

for(i = 0; i < 100;)
  if i == 20
    i = 50
  else
    i = i++
  end 
end

如何实现这一点?

由于需要根据递增的I变量重新评估条件,可以使用while语句:

i = 0

while i < 100  do
  if i == 20
     i = 50
  else
     i = i+1
  end 
end

这可能是适合使用while循环的少数几种情况之一:

i = 0
while i < 10
  if i == 2
    i = 5
  else
    i += 1
  end

  p i
end
# 1
# 2
# 5
# 6
# 7
# 8
# 9
# 10
这相当于ECMAScript中演示的以下C样式for循环:


forlet i=1;我不确定你对这些数字的理解有多准确,但这里有一个更优雅的技巧:

[0...20, 50..100].flat_map(&:to_a).each do |i|
  # ...
end


我不建议这样做,但这是在使用带有块的枚举器时跳过索引的一种方法。假设

skip_index  = 2
skip_number = 4
arr = [*0..10]
然后:


这可能会让您对每种方法的工作原理有一些了解。

这里是一个简洁的while循环,它将实现您想要做的事情

i = 0
while i < 100
    i == 20 ? i = 50 : i += 1
    p i
end
这将返回: 1. 2. 3. 4. 5. 6. 7. 8. 9 10 11 12 13 14 15 16 17 18 19 20 50 51 52 53 ...
100

Ruby没有:++方法,您不需要第一行的第二个分号。@CarySwoveland谢谢,将添加。
skip_index  = 2
skip_number = 4
arr = [*0..10]
arr = arr[skip_number..10] if skip_index.zero?
arr.each do |i|
  puts "i=#{i}"
  # do something
  arr.replace([*skip_number..10]) if i == skip_index-1
end
i=0
i=1
i=6
i=7
i=8
i=9
i=10
i = 0
while i < 100
    i == 20 ? i = 50 : i += 1
    p i
end