基本上我有一个哈希,我想将当前值与前一个相加。
即
我有什么
hash = {:a=>5, :b=>10, :c=>15, :d=>3}
我想要的结果
{:a=>5, :b=>15, :c=>30, :d=>33}
答案 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) }