假設我有兩個哈希說如何從兩個哈希鍵和值(如果他們的關鍵比賽)在第三哈希
hash1 = {1=>"a" , 2=>"b" ,3=>"c" , 4=>"d"}
hash2 = {2=>"whats" ,4 =>"up" ,5=> "dude"}
,我要創建一個結果哈希的密鑰後接着匹配,使得所得散列必須包含鍵(這是在第一哈希值)和值(這是對應的匹配項的值)
hash3 ={b=>"whats" ,d=>"up"}
假設我有兩個哈希說如何從兩個哈希鍵和值(如果他們的關鍵比賽)在第三哈希
hash1 = {1=>"a" , 2=>"b" ,3=>"c" , 4=>"d"}
hash2 = {2=>"whats" ,4 =>"up" ,5=> "dude"}
,我要創建一個結果哈希的密鑰後接着匹配,使得所得散列必須包含鍵(這是在第一哈希值)和值(這是對應的匹配項的值)
hash3 ={b=>"whats" ,d=>"up"}
嘗試下面的代碼。
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 }
這個構造可能有點神祕,但它也可以完成這項工作。
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"}
hash3 = {}
hash1.each_pair { |k, v| hash3[v] = hash2[k] }
它不工作,它只是給HASH1 – user2575339
沒有,它的設置hash3 [ value_in_hash1] = hash2 [same_key],它是用hash1 – SteveTurczyn
中的每個元素進行的,但我更喜歡更好地使用falsetru的解決方案,條件賦值是正確的做法 – SteveTurczyn
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"}
Thankx它的工作........ – user2575339