首页 > 解决方案 > 将前一个值添加到每个哈希值

问题描述

我有一个带有整数值的哈希:

h = {
  a: 1,
  b: 1,
  c: 1,
  d: 2,
  e: 2,
}

我需要添加100到第一个值,对于第二个值及以上,我需要将前面的值添加到原始值以获得:

{
  a: 101,
  b: 102,
  c: 103,
  d: 105,
  e: 107,
}

有没有好的方法来实现这一目标?

标签: rubyhash

解决方案


您可以inject用来计算总和:

h = { a: 1, b: 1, c: 1, d: 2, e: 2}

h.inject(100) { |s, (k, v)| s + v }
#=> 107

在这样做的同时,您还可以设置哈希值以获得累积和:

h.inject(100) { |s, (k, v)| h[k] = s + v }

h #=> {:a=>101, :b=>102, :c=>103, :d=>105, :e=>107}

推荐阅读