数组中先前元素的总和

时间:2017-07-18 10:42:56

标签: arrays ruby

我有一个数组

[3.0, 3.0, 2.0, 5.0, 6.0, 10.0]

对于数组的每个元素,我需要其先前元素的总和。

我知道如何获得前一个元素而不是之前的所有元素。

last = mytab[index - 1] //change here 
res = (e + last) / (index + 1)

3 个答案:

答案 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