在迭代时添加到数组

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

码:

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

我的解决方案

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

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

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

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

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

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

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