【问题标题】: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 

【问题讨论】:

    标签: ruby arrays iteration


    【解决方案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 }
      

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-24
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多