迭代时添加到数组
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
【讨论】:
以上是关于迭代时添加到数组的主要内容,如果未能解决你的问题,请参考以下文章