rails / ruby​​使用相同的键,不同的值合并两个哈希值

我有两个哈希,我想合并。 它们看起来像这样:

[{"Hello"->"3"},{"Hi"->"43"},{"Hola"->"43"}] 

第二个哈希看起来像:

 [{"Hello"->"4"},{"Hi"->"2"},{"Bonjour"->"2"}] 

我想合并这两个哈希数组,以便结果如下:

 [{"Hello"->[{value1=>3},{value2=>4}],{"Hi"->[{value1=>43},{value2=>2}]},{"Bonjour"->[{value1=>0},{value2=>2}]},{"Hola"->[{value1=>43},{value2=>0}]] 

是否有一种简单的方法来合并这两个哈希值,还是我必须单独遍历哈希值并在另一个哈希值中找到该键?

最简单的方法是将哈希数组转换为哈希值:

 h1 = a1.reduce(&:merge) # => {"Hello"=>"3", "Hi"=>"43", "Hola"=>"43"} h2 = a2.reduce(&:merge) # => {"Hello"=>"4", "Hi"=>"2", "Bonjour"=>"2"} 

然后你需要找到所有的键:

  keys = [h1, h2].flat_map(&:keys).uniq # => ["Hello", "Hi", "Hola", "Bonjour"] 

接下来,为每个键构建值数组:

 keys.map do |k| {k => [{value1: h1[k] || "0"}, {value2: h2[k] || "0"}]} end # => [{"Hello"=>[{:value1=>"3"}, {:value2=>"4"}]}, # {"Hi"=>[{:value1=>"43"}, {:value2=>"2"}]}, # {"Hola"=>[{:value1=>"43"}, {:value2=>"0"}]}, # {"Bonjour"=>[{:value1=>"0"}, {:value2=>"2"}]}]