【发布时间】:2026-01-04 18:05:02
【问题描述】:
我有一个哈希
{:a => 2, :b => 8, :c => 10, :d => 40 }
我想修改散列值,使这些值代表运行总计。
{:a => 2, :b => 10, :c => 20, :d => 60 }
我已经走了几条路,但还没有找到正确的答案。我尝试过的一些事情。
data.inject({}) { |result, (k,v)| result[k] = v+ result.values.compact.sum; result }
=> {:a=>2, :b=>10, :c=>22, :d=>74}
我显然不太了解结果是如何在注入中累积的。由于 k 的第一次迭代为零,我正在使用紧凑型。
我可以像这样将值作为数组获取
data.inject([]) { |result, element| result << result.last.to_i + element.last }
=> [2, 10, 20, 60]
我不知道如何修改它以与哈希类似地工作。
我可以这样做,但这似乎不是正确/最有效的方法。
totals = data.inject([]) { |result, element| result << result.last.to_i + element.last }
=> [2, 10, 20, 60]
data.map.with_index { |(k,v),i| [k,totals[i]] }.to_h
=> {:a=>2, :b=>10, :c=>20, :d=>60}
感谢我在这里得到的任何帮助。
【问题讨论】: