【问题标题】:compute hash value of same key ruby计算相同键红宝石的哈希值
【发布时间】:2019-04-23 02:04:08
【问题描述】:

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

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? 但它似乎不起作用..

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

谢谢大家

【问题讨论】:

标签: ruby hash


【解决方案1】:

如果您只想计算哈希中的相等键,您正在寻找的是哈希类中的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}

【讨论】:

    【解决方案2】:

    只需将Hash#merge 与块一起使用,并告诉Ruby 当密钥存在于两个散列中时该怎么做——在本例中,只需将第二个散列的值与第一个散列的值相加即可。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-10
      • 2017-06-15
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多