我的哈希是:
{"20141113"=>[1], "20141114"=>[1, 1]}
我想得到:
{"20141113"=>[1], "20141114"=>[2]}
或
{"20141113"=>1, "20141114"=>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的形式来阻止。