我在ruby中有两个散列,我想比较两个散列,然后用不重复键的键和值创建另一个散列。

A = {"name1" => 123, "name2" => 321, "name3" => 412 }
B = {"name1" => 412, "name2" => 412, "name4" => 444}

我想将b与a进行比较,并获得一个新的散列,其中包含a中不存在的键和键的值。
C = {"name4" => 444}

你能帮帮我吗?
谢谢
当做

最佳答案

您可以使用Hash#selectHash#reject而不使用bang:

C = B.select { |k, _| !A[k] }
#=> {"name4"=>444}
B.reject { |k, _| A[k] }
#=> {"name4"=>444}

如果哈希包含布尔值,请使用nil?方法(A[k].nil?)或Hash#has_key?A.has_key?)。
也可以使用Hash#delete_if方法:
C = B.delete_if { |k, v| A.has_key?(k) }
#=> {"name4"=>444}

08-28 04:02