我有一个数组
[3.0, 3.0, 2.0, 5.0, 6.0, 10.0]
对于数组的每个元素,我需要其先前元素的总和。
我知道如何获得前一个元素而不是之前的所有元素。
last = mytab[index - 1] //change here
res = (e + last) / (index + 1)
答案 0 :(得分:3)
您可以使用each_with_object
数字= [3.0,3.0,2.0,5.0,6.0,10.0]
sum_of_repvious = numbers.each_with_object([]) do |number, accu|
previous = accu.last || 0 # on the first iteration, there is no previous, initialize to 0
accu << previous += number
end
p sum_of_repvious #> [3.0, 6.0, 8.0, 13.0, 19.0, 29.0]
让我更详细地解释一下这里发生了什么:
使用each_with_object
迭代数组并有一个传递给每次迭代的附加对象。我选择它是一个空数组([]
)。
我称之为 accumlator 或 accu 。
在此数组中,我存储前一个数字的总和。在第一步,没有先前的总和,因此|| 0
确保我们0
而不是nil
。
现在你有一个数组,其中包含原始数组中各个索引的数字之和。
答案 1 :(得分:3)
以简单方便的方式尝试 Array#map
> sum = 0
> a.map{|x| sum += x}
#=> [3.0, 6.0, 8.0, 13.0, 19.0, 29.0]
注意:根据专家的意见,这不是一个好的做法,只是替代解决方案
答案 2 :(得分:2)
def sum_array_of_last_elements(array)
array.reduce([]) { |memo, itm| memo << itm.to_f + memo.last.to_f }
end