如何通过哈希中的不同键计算值计数?

时间:2014-11-14 04:24:02

标签: ruby arrays hash

我的哈希是:

{"20141113"=>[1], "20141114"=>[1, 1]}

我想得到:

{"20141113"=>[1], "20141114"=>[2]}

{"20141113"=>1, "20141114"=>2}

我该怎么做?

2 个答案:

答案 0 :(得分:3)

获取密钥,总和:

h.map { |k, v| [k, v.reduce(:+)] }
# => [["20141113", 1], ["20141114", 2]]

使用Hash::[]将其转换为哈希:

{"20141113"=>[1], "20141114"=>[1, 1]}
Hash[h.map { |k, v| [k, v.reduce(:+)]}]
# => {"20141113"=>1, "20141114"=>2}

Enumerable#to_h(可在Ruby 2.1 +中找到)

h.map { |k, v| [k, v.reduce(:+)]}.to_h
# => {"20141113"=>1, "20141114"=>2}

答案 1 :(得分:1)

另一种方式:

h = {"20141113"=>[1], "20141114"=>[1, 1]}

h.merge(h) { |*_,a| a.reduce(:+) }
  #=> {"20141113"=>1, "20141114"=>2}

这使用Hash#merge的形式来阻止。