ruby-on-rails – 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},{"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"}]}]

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...