如何创建一个新数组,用于在Ruby中对数组元素进行求和?
[1,2,3,4,5].each_cons(2).map {|a, b| a + b }
给了我[3, 5, 7, 9]
但预期结果为[1,3,6,10,15]
。
答案 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]