Ruby 带条件增量的For循环
我想要一个根据条件递增的for循环。循环通常应将其索引i增加1,但如果满足某些条件i==20,则应将i的值设置为50,跳过21-49。伪代码如下所示: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 = 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
...
100Ruby没有:++方法,您不需要第一行的第二个分号。@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