计算相同键ruby的哈希值



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

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

然后我试图实现的是,我想多次将一个具有不同密钥或/和相同密钥的新散列推到该散列中:

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

结果应该是

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

第一件事是推送新的散列并保留重复的密钥。我看到了答案=在Ruby中,如何在不覆盖重复键的情况下合并两个哈希?但它似乎不起作用。。

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

谢谢各位

如果你只想在散列中计算相等的键,你要找的是散列类中的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}

只需将Hash#merge与一个块一起使用,并告诉Ruby当键存在于两个哈希中时该怎么做——在本例中,只需将第二个哈希中的值添加到第一个哈希中。

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

最新更新