假设我有一个 @lines
集合,我想对其进行迭代,但我想根据集合的内容来操纵它的迭代方式,我该怎么做?
即像这样:
@lines.each_with_index do |line, index|
if (index % 3 = 0)
jump_to index == next_multiple_of_3
end
end
所以它可能看起来像这样:
Element | Index
a | 1
b | 2
c | 3
f | 6
g | 7
h | 8
i | 9
l | 12
我该怎么做?
编辑 1
请注意,正如我在下面的评论中所解释的,我不一定总是想跳转到特定的倍数。基本上,我想跳转到某个由当前迭代中发生的事情决定的任意索引。
所以第一次绕圈时,它可以向上跳 3
索引,但是下一次它向上跳 7
索引,然后接下来的 5 次它跳到1
和正常一样,然后它向上跳 2
索引。
唯一不变的是,确定其在原始迭代中的进展情况的方法是基于当前迭代 block 内发生的事情。
最佳答案
使用 while 循环并自行管理索引。多年来,我们一直在劝阻人们不要这样做。但这是一种合适的情况。 :)
idx = 0
while idx < @lines.length
line = @lines[idx]
idx += condition ? x : y # or whatever logic you have
end
当然,这假设@lines
能够随机访问。如果不是,则将其设为数组。
关于arrays - 我可以操纵当前正在迭代的集合的当前迭代吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780083/