如何在ruby中对数组元素求和?

如何在Ruby中创建一个用于求和数组元素的新数组?

[1,2,3,4,5].each_cons(2).map {|a, b| a + b } 

给我[1,3,6,10,15] [3, 5, 7, 9]但预期结果是[1,3,6,10,15]

 [1, 2, 3, 4, 5].each_with_object([]){|e, a| a.push(a.last.to_i + e)} # => [1, 3, 6, 10, 15] 

我认为更容易理解:

 temp_sum = 0 arr.map! {|e| temp_sum += e } => [1, 3, 6, 10, 15] 

如果你想创建一个新的数组而不是现有的数组,只需使用map而不是map!

有很多方法可以做到这一点。 一种方法是创建一个Enumerator实例并使用inject

 def adder array enum = Enumerator.new do |y| array.inject (0) do |sum, n| y << sum + n sum + n end end enum.take array.size end adder [1,2,3,4,5] #=> [1, 3, 6, 10, 15] 

另一种变化:

 > [1, 2, 3, 4, 5].reduce([]) {|acc, el| acc << el + (acc[-1] || 0); acc} #=> [1, 3, 6, 10, 15] 

育。

它不是很优雅,但似乎有效:

 [1,2,3,4,5].each_with_object([]){|i,l| l<<(l.last||0)+i} #=> [1,3,6,10,15]