Ruby 为什么';折叠阵列';函数返回的元素比预期的少?

Ruby 为什么';折叠阵列';函数返回的元素比预期的少?,ruby,Ruby,我正在编写一个函数,在中间索引处折叠数组。它接受任意长度的“数组”。它接受一个整数表示折叠或“运行”的次数 它的目的是返回一个数组,其中添加了如下元素: 折叠1次: [1,2,3,4,5]->[6,6,3] 一点想象: Step 1 Step 2 Step 3 Step 4 Step5 5/ 5| 5\

我正在编写一个函数,在中间索引处折叠数组。它接受任意长度的“数组”。它接受一个整数表示折叠或“运行”的次数

它的目的是返回一个数组,其中添加了如下元素:

折叠1次: [1,2,3,4,5]->[6,6,3]

一点想象:

 Step 1         Step 2        Step 3       Step 4       Step5
                     5/           5|         5\          
                    4/            4|          4\      
1 2 3 4 5      1 2 3/         1 2 3|       1 2 3\       6 6 3
----*----      ----*          ----*        ----*        ----*
折叠2次: [1,2,3,4,5]->[9,6]

这是一个代码战挑战。 我在终点站试用过,效果很好。 我已经尝试过调整数组切片和映射的线条,它们似乎不是问题的原因

我已经尝试为最终数组输出添加一个变量,以确保当do块在新数组而不是原始数组中运行多次时。这也不是问题所在

def fold_array(array, runs)
 runs.times do
   if array.length == 1
       array = array
     elsif array.length.even?
        arr2 = array.slice!(array.length/2..-1).reverse!
        final1 = array.zip(arr2).map {|a| a.inject(:+)}
        array = final1
     else
        mi = (array.length/2) 
        mv = array.slice(mi)
        arr2 = array.slice!(mi..-1).reverse!
        final2 = array.zip(arr2).map {|a| a.inject(:+)}
        final2.push(mv)
        array = final2
    end
  end
 array
end
输入=[1,2,3,4,5],1 测试通过:值==[6,6,3]

输入=[1,2,3,4,5],2 测试失败:应为:[9,6],而不是得到:[3]

输入=[1,2,3,4,5],3 测试失败:预期为:[15],但实际为:[1]

输入=[-9,9,-8,8,66,23],1 测试通过:值==[14,75,0]


当运行次数为1时,我得到了正确的结果,但当运行次数为2或更多时,结果会出错。

您的问题是您正在修改输入数组,Codewars正在多个测试用例中重用该数组。执行类似于
arr=array.dup
的操作作为函数的第一行,然后将代码中所有后续出现的
array
更改为
arr
(或您选择的任何变量名称),然后您就可以了

非常感谢TanéTachyon,这次成功了。