Ruby Gurus第一次问题的长期欣赏者。
我有两个哈希。
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"}
订单无关紧要。
答案 0 :(得分:4)
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"}
答案 1 :(得分:1)
我会这样做:
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}