2013-07-12 32 views

回答

2

嘗試下面的代碼。

hash1 = {1=>"a" , 2=>"b" ,3=>"c" , 4=>"d"} 
hash2 = {2=>"whats" ,4 =>"up" ,5=> "dude"} 
hash3 = {} 
hash2.each_entry { |key, value| hash3[hash1[key]] = value if hash1.include? key } 
7

這個構造可能有點神祕,但它也可以完成這項工作。

hash1 = {1=>"a" , 2=>"b" ,3=>"c" , 4=>"d"} 
hash2 = {2=>"whats" ,4 =>"up" ,5=> "dude"} 

hash3 = Hash[(hash1.keys & hash2.keys).map do |k| 
    [hash1[k], hash2[k]] 
end] 
hash3 # => {"b"=>"whats", "d"=>"up"} 

另一種方式

hash3 = hash2.each_with_object({}) do |(k, v), memo| 
    memo[hash1[k]] = v if hash1[k] 
end 
hash3 # => {"b"=>"whats", "d"=>"up"} 
+0

Thankx它的工作........ – user2575339

-2
hash3 = {} 
hash1.each_pair { |k, v| hash3[v] = hash2[k] } 
+0

它不工作,它只是給HASH1 – user2575339

+0

沒有,它的設置hash3 [ value_in_hash1] = hash2 [same_key],它是用hash1 – SteveTurczyn

+0

中的每個元素進行的,但我更喜歡更好地使用falsetru的解決方案,條件賦值是正確的做法 – SteveTurczyn

2
h1 = {1=>"a" , 2=>"b" ,3=>"c" , 4=>"d"} 
h2 = {2=>"whats" ,4 =>"up" ,5=> "dude"} 
h3 = Hash[h1.update(h2){|k,o,n| [o,n]}.map{|k,v| v if v.is_a? Array}.compact] 
# => {"b"=>"whats", "d"=>"up"} 
h3 = Hash[h1.update(h2){|k,o,n| [o,n]}.select{|k,v| v.is_a? Array}.values] 
# => {"b"=>"whats", "d"=>"up"}