Ruby 大师第一次提问的长期欣赏者。
我有两个哈希。
hash1 = {"a" =>1, "b"=> 2, "c" => 3}
hash2 = {"f" =>1, "g"=> 2, "h" => 3, "i"=>2, "j"=>1}
当它们的值相等时,我想用第一个哈希的键替换第二个哈希的值,例如:
hash2 = {"f"=>"a", "g"=>"b", "h"=>"c", "i"=>"b", "j"=>"a"}
顺序根本不重要。
Ruby 大师第一次提问的长期欣赏者。
我有两个哈希。
hash1 = {"a" =>1, "b"=> 2, "c" => 3}
hash2 = {"f" =>1, "g"=> 2, "h" => 3, "i"=>2, "j"=>1}
当它们的值相等时,我想用第一个哈希的键替换第二个哈希的值,例如:
hash2 = {"f"=>"a", "g"=>"b", "h"=>"c", "i"=>"b", "j"=>"a"}
顺序根本不重要。
hash1_inverted = hash1.invert
hash3 = hash2.map { |k, v| [k, hash1_inverted[v]] }.to_h
#=> {"f"=>"a", "g"=>"b", "h"=>"c", "i"=>"b", "j"=>"a"}
我会做如下:
hash1 = {:a =>1, :b=> 2, :c => 3}
hash2 = {:f =>1, :g=> 2, :h => 3, :i=>2, :j=>1}
hash2.each_with_object({}){|(k,v),h| h[k]=hash1.key(v)}
# => {:f=>:a, :g=>:b, :h=>:c, :i=>:b, :j=>:a}
或者
hash1 = {:a =>1, :b=> 2, :c => 3}
nw_hsh = hash1.invert
hash2 = {:f =>1, :g=> 2, :h => 3, :i=>2, :j=>1}
hash2.each_with_object({}){|(k,v),h| h[k]=nw_hsh[v]}
# => {:f=>:a, :g=>:b, :h=>:c, :i=>:b, :j=>:a}