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