如何在ruby中转置两个散列以生成单个散列或数组?

如何在ruby中转置两个散列以生成单个散列或数组?,ruby,hash,enumerable,Ruby,Hash,Enumerable,我想将下面的两个散列合并成一个新的散列或数组: hash1 = {1=>"]", 2=>"}", 3=>")", 4=>"(", 5=>"{", 6=>"["} hash2 = {1=>"[", 2=>"{", 3=>"(", 4=>")", 5=>"}", 6=>"]"} 我希望结果如下所示: result = {"["=>"]", "{"=>"}", "("=>")"} 或 有没有ruby方法可以做

我想将下面的两个散列合并成一个新的散列或数组:

hash1 = {1=>"]", 2=>"}", 3=>")", 4=>"(", 5=>"{", 6=>"["}
hash2 = {1=>"[", 2=>"{", 3=>"(", 4=>")", 5=>"}", 6=>"]"}
我希望结果如下所示:

result = {"["=>"]", "{"=>"}", "("=>")"}

有没有ruby方法可以做到这一点?

您可以使用:

您可以使用:


嗯,另一种你可以得到你想要的东西的方法是使用 像这样:


嗯,另一种你可以得到你想要的东西的方法是使用 像这样:

或:

或:


与@iGan的优秀答案相比,它的优势在于,当Hashtransform_键首次出现时,它可以与2.4之前的Ruby版本一起使用。与@iGan的优秀答案相比,它的优势在于,当Hashtransform_键首次出现时,它可以与2.4之前的Ruby版本一起使用。
result = [ ["[","]"], ["{","}"], ["(",")"] ]
res = hash1.transform_keys { |k| hash2[k] }

res #=> {"["=>"]", "{"=>"}", "("=>")", ")"=>"(", "}"=>"{", "]"=>"["}

res.first(3) #=> [["[", "]"], ["{", "}"], ["(", ")"]]
res = hash1.deep_merge(hash2) { |key, this_val, other_val| [other_val , this_val] }.values
# =>  [["[", "]"], ["{", "}"], ["(", ")"], [")", "("], ["}", "{"], ["]", "["]
res.first(3) 
# => [["[", "]"], ["{", "}"], ["(", ")"]]
hash1.each_with_object({}) { |(k, v), h| h[hash2[k]] = v }

#=> {"["=>"]", "{"=>"}", "("=>")", ")"=>"(", "}"=>"{", "]"=>"["}
hash2.each_with_object({}) { |(k, v), h| h[v] = hash1[k] }

#=> {"["=>"]", "{"=>"}", "("=>")", ")"=>"(", "}"=>"{", "]"=>"["}
hash1.merge(hash2){|_, v1, v2| [v1, v2]}.values
# => [["]", "["], ["}", "{"], [")", "("], ["(", ")"], ["{", "}"], ["[", "]"]]