我从一个基本的哈希开始,其中的键是一个字符串,值是一个整数。
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?,但似乎没有用。.
然后我认为我应该匹配相同的键并计算值。但是我还是找不到答案。
谢谢
答案 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 }