-1

2つのハッシュがあるとします

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 に答える