迭代时添加到数组

Posted

技术标签:

【中文标题】迭代时添加到数组【英文标题】:Adding to an Array while Iterating 【发布时间】:2012-08-27 07:13:47 【问题描述】:

为什么这段代码会“锁定”ruby?克服它的最好方法是什么?我在下面发布了我的解决方案。还有另一种方法可以做到这一点吗?提前致谢!

代码:

nums = [1, 2, 3] 
nums.each  |i| nums << i + 1 

我的解决方案:

nums = [1, 2, 3]
adjustments = []
nums.each  |i| adjustments << i + 1 
nums += adjustments 

【问题讨论】:

【参考方案1】:
nums = [1, 2, 3] 
nums.each  |i| nums << i + 1 

您在迭代数组时添加到数组中,因此它永远不会完成执行。

【讨论】:

【参考方案2】:

那是因为每个都使用一个枚举器(所以如果你不断添加它,它永远不会到达末尾)。

您可以在应用之前复制数组。

nums = [1, 2, 3] 
nums.dup.each  |i| nums << i + 1 

另一种方法是附加 map 给出的额外元素:

nums = [1, 2, 3] 
nums += nums.map  |i|  i + 1 

【讨论】:

以上是关于迭代时添加到数组的主要内容,如果未能解决你的问题,请参考以下文章

在使用“each”迭代哈希时添加新成员

如何迭代 JSON 数组并从异步箭头函数添加数据?

不迭代时如何解决数组中元素的eslint缺少关键道具?

C++程序在迭代到数组的最后一个元素时崩溃

在迭代其范围时修改Swift数组 - 0到count,startIndex到endIndex

PHP 可迭代到数组或 Traversable