-1

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

顺序根本不重要。

4

2 回答 2

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"}
于 2013-09-19T18:20:40.113 回答
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}
于 2013-09-19T19:40:44.373 回答