1

可能重复:
Ruby 中的累积数组总和

我有一个这样的整数数组

[20, 25, 40, 60]

我怎样才能把它变成一个数组,每个元素代表它之前元素的累积值,包括它自己?

[20, 45, 85, 145]

我正在使用 Rails 3.2.0 和 ruby​​ 1.9.3

4

6 回答 6

6
s = 0
[20, 25, 40, 60].map{|e| s += e}
于 2012-11-29T06:16:34.840 回答
2
[20, 25, 40, 60].reduce([]) do |arr, v|
  arr << (arr.last || 0) + v
end

或者一个丑陋的衬里。

[20, 25, 40, 60].reduce([0]){ |a, v| a << a[-1] + v }[1..-1]
于 2012-11-29T06:14:06.770 回答
1
array = [20, 25, 40, 60]
(array.size - 1).times { |i| array[i + 1] += array[i] }
puts array
# => [20, 45, 85, 145]
于 2012-11-29T06:14:22.527 回答
0

MATLAB:

B = cumsum(A)

红宝石:

class Array
  def ruby_cumsum!
    (1..size-1).each {|i| self[i] += self[i-1] }
    self
  end
end
于 2012-11-29T06:15:02.420 回答
0
arr.each_with_index.map{|x, i| x + (i==0 ? 0 : arr[0..i-1].inject(:+))}

=> [20, 45, 85, 145]
于 2012-11-29T06:16:50.113 回答
0
arr = [20, 25, 40, 60]
first = []
sum = 0

arr.each do |e|
  sum += e
  first << sum
end
puts first
于 2012-11-29T06:19:24.913 回答