rails/ruby​​将具有相同密钥,不同值的两个哈希合并 [英] rails/ruby merge two hashes with same key, different values

查看:58
本文介绍了rails/ruby​​将具有相同密钥,不同值的两个哈希合并的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个要合并的哈希.他们看起来像这样:

I have two hashes that I would like to merge. they look like this:

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

第二个哈希看起来像:

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

我想合并这两个哈希数组,以便结果看起来像这样:

I would like to merge these two hash arrays so that the result looks like:

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

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

Is there a simple way to merge these two hashes or do I have to iterate through the hashes individually and find that key in the other hash?

推荐答案

最简单的方法是将哈希数组变成哈希:

The easiest way is turn the arrays of hashes to hashes:

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

然后您需要找到所有键:

Then you need to find all the keys:

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

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

Next, for each key, build the array of values:

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"}]}]

这篇关于rails/ruby​​将具有相同密钥,不同值的两个哈希合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆