【发布时间】:2017-08-04 10:33:51
【问题描述】:
假设我有一个@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 指数上涨。
唯一不变的是,确定它如何通过原始迭代的方式是基于当前迭代块内发生的事情。
【问题讨论】:
-
@sschmeck,
[1,2,3].method(:step) #Name error: undefined method 'step' for class 'Array'. -
不应该是
if (index % 3 == 0)而不是if (index % 3 = 0) -
@marcamillion 你总是跳过元素还是你也可以“跳回来”?
-
我可能在这里遗漏了一些东西,但是
next if condition_not_applicable?有什么问题? -
@fylooi:如果你想一次跳 几个 位置,你需要在每次迭代中跟踪它。 (跳过了吗?)。这需要更多代码。
标签: arrays ruby iterator enumerator