首页 > 解决方案 > 在 ruby​​ 中合并嵌套的哈希数组

问题描述

在与 common_count 比较时,示例代码 nameA 和 nameB 缺少几个日期。

因此,预期的输出哈希必须存在缺失日期,值为零

先感谢您。


    "common_count"=>[
         {20190704=>0}, {20190705=>0}, {20190706=>0}, {20190707=>0},               
         {20190708=>0}, {20190709=>0}, {20190710=>0}, {20190711=>0}
        ]
   }

   {

    "nameA"=>[
         {20190704=>10} {20190706=>50}, {20190707=>10},               
         {20190708=>0}, {20190709=>10}, {20190710=>0}, {20190711=>40}
        ],

   "nameB"=>[
         {20190704=>30}, {20190707=>20},               
         {20190708=>3}, {20190709=>5}, {20190710=>0}, {20190711=>20}
        ], ..... etc
   }

   "nameA"=>[
         {20190704=>10}, {20190705=>0}, {20190706=>50}, {20190707=>10},               
         {20190708=>0}, {20190709=>10}, {20190710=>0}, {20190711=>40}
        ],

   "nameB"=>[
         {20190704=>30},{20190705=>0}, {20190706=>0} {20190707=>20},               
         {20190708=>3}, {20190709=>5}, {20190710=>0}, {20190711=>20}
        ],...etc
   }

标签: ruby-on-railsrubyhashmerge

解决方案


你可以简单地:

entries = {
  "common_count"=>[
   {"20190704"=>0}, {"20190705"=>0}, {"20190706"=>0}, {"20190707"=>0},               
   {"20190708"=>0}, {"20190709"=>0}, {"20190710"=>0}, {"20190711"=>0}
  ],
  "nameA"=>[
   {"20190704"=>10}, {"20190706"=>50}, {"20190707"=>10},               
   {"20190708"=>0}, {"20190709"=>10}, {"20190710"=>0}, {"20190711"=>40}
 ],
 "nameB"=>[
   {"20190704"=>30}, {"20190707"=>20},               
   {"20190708"=>3}, {"20190709"=>5}, {"20190710"=>0}, {"20190711"=>20}
 ]
}

default = entries.delete("common_count")
default_map = default.inject(:merge)

merged_entries = entries.map do |nameKey, value|
  value_map = value.inject(:merge)
  merged_value_map = default_map.merge(value_map)
  merged_value = merged_value_map.map { |k, v| {k => v} }

  {nameKey => merged_value}
end.inject(:merge)

请注意,我必须将散列数组转换为单个散列才能合并散列的内容。然后我将哈希结果还原为哈希数组。


推荐阅读