arrays - 我可以操纵当前正在迭代的集合的当前迭代吗?

标签 arrays ruby iterator enumerator

假设我有一个 @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/

相关文章:

ruby-on-rails - 如何计算数组中连续的数字?

javascript - 从数组中获取价格最高的对象

C++如何遍历不同的类型

for-loop - 如何循环特定(可变)次数?

c - 静态数组和动态数组的元素个数

c++ - 用数字对字符串数组进行排序 C++

ruby - 在 ruby​​ shoes 框架中处理表

ruby - Bundler 如何在一个文件中单独要求 Gemfile 中的 gem ?

ruby-on-rails - 如何根据 'created_at'字段的月份设置条件

java - 如何将数字的二进制表示形式的java链表转换为数字的十进制表示形式的字符串?