计算相同密钥红宝石的哈希值

时间:2018-11-20 15:22:40

标签: ruby hash

我从一个基本的哈希开始,其中的键是一个字符串,值是一个整数。

hash = {"a"=>2, "b"=>3}

然后我想要实现的是,我想多次将不同的键或/相同的新哈希推入哈希中:

hash2 = {"c"=>4, "a"=>5}

结果应为

h_result = {"a"=>7, "b"=>3, "c"=>4}

第一件事是推送新的哈希并保留重复的键。 我看到了答案= How can I merge two hashes without overwritten duplicate keys in Ruby?,但似乎没有用。.

然后我认为我应该匹配相同的键并计算值。但是我还是找不到答案。

谢谢

2 个答案:

答案 0 :(得分:1)

如果您只想在哈希中计算相等的键,那么您所寻找的就是Hash类中的merge方法。

https://ruby-doc.org/core-2.2.1/Hash.html#method-i-merge

  

返回一个新的哈希,其中包含other_hash和   hsh的内容。如果未指定块,则带有   重复的密钥将是other_hash的密钥。否则为   每个重复的键都是通过使用该键调用该块来确定的,   在hsh中的值,在other_hash中的值。

当您将块传递给merge方法时,它将同时产生旧值和新值,并且您可以在那里进行计算。

例如:

hash  = {"a"=>2, "b"=>3}
hash2 = {"c"=>4, "a"=>5}

result = hash.merge(hash2) { |key, old_val, new_val| old_val + new_val }

p result #=> {"a"=>7, "b"=>3, "c"=>4}

答案 1 :(得分:1)

只需将Hash#merge与一个块一起使用,并告诉Ruby当密钥同时存在于两个哈希中时该怎么做–在此示例中,只需将第二个哈希中的值添加到第一个哈希中的值即可。

hash.merge(hash2) { |key, v1, v2| v1 + v2 }
#=> { "a" => 7, "b" => 3, "c" => 4 }