我在Rails 3.1中作为相对noob工作,并设法使用此代码将db中的用户事务数量提取到日期排序的数组中(其中date和amount_cents是db属性):
@user_trans = User.transactions.order(“date”)。map {| t | t.amount_cents}
=> [1000,-350,-250,600,750,-450]
我很容易得到一个数组:
@ user_trans.sum => 1300
但我无法弄清楚的是迭代数组的每个元素并将第一个元素添加到第二个,第二个到第三个等的优雅方式,从而导致运行总计:
[1000,650,400,1000,1750,1300]
似乎.each或.inject将是使用的方法,但在笨重的多行黑客之外,我没有找到这样做的神奇语法,但似乎应该有一个简化的方法。订单很重要。也许会退回总数,然后反转?
我满怀期待地坐在你的脚边......:)
答案 0 :(得分:4)
这是一个单行。 to_i
是处理结果数组为空的第一个元素所必需的(nil.to_i
将评估为0
)。
@user_trans.inject([]) { |result, element| result << result.last.to_i + element }