我有 2 个哈希(稍后将转换为数组,不确定这是否相关):
Hash1 = {"X"=>2, "Y"=>1, "Z"=>1}
Hash2 = {"X"=>1, "Y"=>1}
我需要像 (Hash3 = Hash1 - Hash2) 这样减去它们,并且我需要 Hash3 的结果,在这种情况下:
Hash3 = {"X"=>1, "Y"=>0, "Z"=>1}
我看到的所有示例和答案都会导致结果哈希中不存在值为 0 (Y) 的键,这不是我需要的。
我正在使用 Ruby 2.3.3 和 Rails 5.0
最佳答案
您可以 merge
他们:
h1 = {"X"=>2, "Y"=>1, "Z"=>1}
h2 = {"X"=>1, "Y"=>1}
h1.merge(h2) { |k, v1, v2| v1 - v2 }
#=> {"X"=>1, "Y"=>0, "Z"=>1}
只要两个哈希中都存在一个键,就会调用该 block 来确定新值。
由于这种行为,如果键仅出现在 h2
中,它将不会产生负值:
h1 = {"X"=>2, "Y"=>1}
h2 = {"X"=>1, "Y"=>1, "Z"=>1}
h1.merge(h2) { |k, v1, v2| v1 - v2 }
#=> {"X"=>1, "Y"=>0, "Z"=>1}
您可能期望:
#=> {"X"=>1, "Y"=>0, "Z"=>-1}
这是什么tadman's solution会回来的。
关于ruby-on-rails - ruby 中的哈希减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45088423/