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

时间:2016-11-22 08:44:10

标签: arrays ruby

如何创建一个新数组,用于在Ruby中对数组元素进行求和?

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

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

5 个答案:

答案 0 :(得分:8)

我认为更容易理解:

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

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

答案 1 :(得分:2)

有很多方法可以做到这一点。一种方法是创建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]

答案 2 :(得分:1)

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

答案 3 :(得分:1)

另一种变化:

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

育。

答案 4 :(得分:0)

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

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