在迭代时添加到数组

时间:2012-09-02 01:34:04

标签: ruby arrays iteration

为什么这段代码'锁定'红宝石?什么是超越它的最佳方式?我发布了下面的解决方案。还有另一种方法吗?提前致谢!

代码:

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

我的解决方案:

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

2 个答案:

答案 0 :(得分:9)

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

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

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

另一种方法是追加map:

给出的额外元素
nums = [1, 2, 3] 
nums += nums.map { |i|  i + 1 }

答案 1 :(得分:4)

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

当你在迭代它时,你正在添加数组,所以它永远不会完成执行。