我有一个像这样的哈希数组:
[{"apple"=>5}, {"banana"=>4}, {"orange"=>6}, {"apple"=>4}, {"orange"=>2}]
我如何到达:
[{"apple"=>9}, {"banana"=>4}, {"orange"=>8}]
还有:
cache = Hash.new { |h, k| h[k] = { k => 0 } }
aoh.flat_map(&:to_a)
.each_with_object(cache) { |(k,v),h| h[k][k] += v }
.values
或者为了更清晰一点,分成更多部分:
cache = Hash.new { |h, k| h[k] = { k => 0 } }
sum = -> ((k, v), h) { h[k][k] += v }
summary = aoh.flat_map(&:to_a)
.each_with_object(cache, &sum)
.values
有点奇怪的 cache
Hash 同时做两件事:
- 跟踪到目前为止在其 key 中看到了哪些 key 。
- 在其值中跟踪我们想要的最终结果。
我是一名优秀的程序员,十分优秀!