将哈希值中的前一个值相加

时间:2014-06-11 11:30:24

标签: ruby-on-rails ruby

基本上我有一个哈希,我想将当前值与前一个相加。

我有什么

hash = {:a=>5, :b=>10, :c=>15, :d=>3}

我想要的结果

{:a=>5, :b=>15, :c=>30, :d=>33}

2 个答案:

答案 0 :(得分:8)

hash.inject(0) { |s, (k, v)| hash[k] = s + v }
# => 33
hash
# => {:a=>5, :b=>15, :c=>30, :d=>33} 

如果您想保留原始哈希值,可以使用each_with_object代替:

hash.each_with_object({}) { |(k, v), h| h[k] = v + (h.values.last||0)  }
# => {:a=>5, :b=>15, :c=>30, :d=>33} 

答案 1 :(得分:2)

以下内容将返回一个新的哈希实例:

hash.each_with_object({}) { |(key, val), new_hash| new_hash[key] = val + (new_hash.values.last||0)  }