在Ruby哈希中将相同键的值一起添加

时间:2013-04-07 23:12:29

标签: ruby hash hashtable key-value-store

我有一个从.txt文件创建的哈希表。哈希表中的某些元素具有相同的键。 Ruby获取最后一个实例并在哈希表中使用该值。我如何将重复键的值一起添加?

例如,如果我有一个哈希表: hash = {a => 1,a => 2,b => 3}

我希望生成的哈希表为: hash = {a => 3,b => 3}

1 个答案:

答案 0 :(得分:3)

使用哈希的块形式#更新

如果要通过将当前哈希中的值与与另一个哈希中存储的重复键关联的值一起添加来替换当前哈希值,则可能需要使用Hash#update的块形式。该块定义了如何处理重复键;在这种情况下,我们只需将它们的值相加。例如:

h1 = { a: 1, b: 3 }
h2 = { a: 2 }
h1.update(h2) { |k, v1, v2| v1 + v2 }
# => {:a=>3, :b=>3}

请注意,这是一次就地更改;你实际上正在修改 h1 中的值。如果要返回包含合并值的新哈希而不是覆盖 h1 ,只需使用Hash#merge而不是Hash#update。