本質上,我只想合并出現在兩個哈希中的鍵。最終目標是添加或乘以這些值。
hash1 = {"a" => 1, "b" => 2, "c" => 3 }
hash2 = {"a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5}
{"a" => 2, "b" => 4, "c" => 6 }
這在添加正確值的意義上起作用,但也回傳了 d 和 e。
hash1.merge(hash2) { |key1, value1, value2| value1 value2 }
#=> {"a" => 2, "b" => 4, "c" => 6, "d" => 4, "e" => 5}
uj5u.com熱心網友回復:
試試下面的代碼
hash1 = {"a" => 1, "b" => 2, "c" => 3 }
hash2 = {"a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5}
(hash1.keys & hash2.keys).map{ |key| [key, hash1[key] hash2[key]]}.to_h
=> {"a"=>2, "b"=>4, "c"=>6}
uj5u.com熱心網友回復:
keys您可以通過以下方式確定共同點&:
keys = hash1.keys & hash2.keys
#=> ["a", "b", "c"]
然后slice在之前使用merge:
hash1.slice(*keys).merge(hash2.slice(*keys)) { |k, v1, v2| v1 v2 }
#=> {"a"=>2, "b"=>4, "c"=>6}
在您的示例中,結果等效于合并hash2其中也存在的鍵,hash1其中可以寫為:
hash1.merge(hash2.slice(*hash1.keys)) { |k, v1, v2| v1 v2 }
#=> {"a"=>2, "b"=>4, "c"=>6}
但是,這僅在hash1定義公共鍵時才有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512613.html
標籤:红宝石哈希钥匙
