当值相等时,用一个第二个哈希的键替换一个哈希的值

时间:2013-09-19 18:16:28

标签: ruby hash comparison

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"}

订单无关紧要。

2 个答案:

答案 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}