当前位置: 首页 > 知识库问答 >
问题:

rails/ruby 合并具有相同键、不同值的两个哈希值

巢星纬
2023-03-14

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

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

有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

共有1个答案

闻人业
2023-03-14

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

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"}]}]
 类似资料:
  • 我会从我想达到的目标开始 意图 该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。 XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。 方法 我已经做的是创建一个

  • 我想将两个哈希数组合并到一个新数组中: 现在这就是我正在寻找的结果: 我在Ruby文档中唯一能找到的合并选项是用另一个散列覆盖重复项。那么如何才能达到我需要的版本呢?

  • 问题内容: Hashcode()和equals()的概念是 1)如果两个对象根据equal()相等,则在这两个对象中的每一个上调用hashcode方法应产生相同的哈希码。 另一个是 2)如果两个对象根据equal()不相等,则不需要在两个对象中的每一个上调用hashcode方法必须产生不同的值。 我尝试并理解了第一个,这是第一点的代码。 上面的程序为两个不同的对象提供了相同的哈希码。 有人可以用一

  • 问题内容: 如果我想找出两个键中是否没有一个键与另一个键不同,并且该键的值彼此匹配,如何最好地比较两个键。 将A与B进行比较时,由于B和D键的不同,它应该会失败。 如何最好地比较未排序的哈希图? 问题答案: 做一个支票上两者秒。 注意: 如果您包含键,那没有问题,但是如果您的Map包含类型键,则需要确保您的类实现了。

  • 我还将列表一中的和成员的每个哈希代码与列表二中成员的哈希代码进行了比较。而且没有区别。但是如果我比较完整列表的hashcode,就有区别了。我不知道为什么。我很无助。 也许有人能帮我。请提前向我致以最诚挚的问候和感谢。

  • 问题内容: 我正在尝试将具有相同ID但具有不同列值的不同行合并为一个。 例如 : 我希望将其结合起来,这样结果是: 或者 或上述内容的任何其他变体,以使行以某种方式连接在一起。 任何帮助,将不胜感激!提前致谢。 问题答案: 请先阅读我的评论-除非仅用于报告目的,否则您甚至都不要考虑这样做,并且您想了解如何在普通SQL中做到这一点(而不是使用报告的正确解决方案)工具)。 第二种格式最简单,特别是如果