"3"},{"Hi"->"43"},{"Hola"->"43"}] 第二个哈希看起来像: [{"Hello"->"4"},{"Hi"->-6ren">
gpt4 book ai didi

ruby-on-rails - rails/ruby 合并两个具有相同键、不同值的散列

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:44 25 4
gpt4 key购买 nike

我有两个要合并的散列。它们看起来像这样:

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

关于ruby-on-rails - rails/ruby 合并两个具有相同键、不同值的散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24916479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com