我想把下面的两个哈希值合并到一个新的哈希或数组中:
hash1 = {1=>"]", 2=>"}", 3=>")", 4=>"(", 5=>"{", 6=>"["}
hash2 = {1=>"[", 2=>"{", 3=>"(", 4=>")", 5=>"}", 6=>"]"}
我希望结果看起来像这样:
result = {"["=>"]", "{"=>"}", "("=>")"}
要么
result = [ ["[","]"], ["{","}"], ["(",")"] ]
有没有可以做到这一点的ruby方法?
你可以使用Hash#transform_keys:
res = hash1.transform_keys { |k| hash2[k] }
res #=> {"["=>"]", "{"=>"}", "("=>")", ")"=>"(", "}"=>"{", "]"=>"["}
res.first(3) #=> [["[", "]"], ["{", "}"], ["(", ")"]]
好吧,另一种方法,你可以得到你想要的是通过像这样使用Hash#deep_merge:
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
# => [["]", "["], ["}", "{"], [")", "("], ["(", ")"], ["{", "}"], ["[", "]"]]