-1

假设我有两个哈希说

hash1 = {1=>"a" , 2=>"b" ,3=>"c" , 4=>"d"}

hash2 = {2=>"whats" ,4 =>"up" ,5=> "dude"}

我必须创建一个结果哈希,如果它们的键匹配,那么结果哈希必须包含键(这是第一个哈希中的值)和值(这是对应的匹配键的值)

hash3 ={b=>"whats" ,d=>"up"}
4

4 回答 4

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"}
于 2013-07-12T09:14:52.810 回答
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 }
于 2013-07-12T09:12:27.190 回答
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"}
于 2013-07-12T09:33:23.113 回答
-2
hash3 = {}
hash1.each_pair { |k, v| hash3[v] = hash2[k] }
于 2013-07-12T09:15:17.457 回答