首页 > 解决方案 > 合并 Perl HOH 的重复路径值

问题描述

我有一个 perl HOH(哈希散列),其中我有序列号 1,2,3.... 等等以及具有相关计数器值的目录路径。任何人都可以建议一种方法,我可以将重复的内部路径(例如, /usr/lib , /bin/ )合并为一个新的哈希值并添加值?

样品 HOH:

$VAR1 = {
          '1' => {
                   '/usr/lib' => 18
                 },
          '3' => {
                   '/bin/' => '3'
                 },
          '4' => {
                   '/usr/lib' => 12
                 },
          '2' => {
                   '/bin/' => '6'
                 },
          '5' => {
                   '/dev/' => '2'
                 },
          '6' => {
                   '/tmp/' => '8'
                 }
        };

我正在寻找的最终输出要求是具有组合值的简单哈希。无需序列号:

$VAR1 = {
              '/usr/lib' => '30',
              '/bin/' => '9',
              '/dev/' => '2',
              '/tmp/' => '8'
              
        };

标签: perl

解决方案


您不关心外部哈希的键。所以让我们开始吧values(%$VAR1)

{ '/usr/lib' => 18 },
{ '/bin/' => '3' },
{ '/usr/lib' => 12 },
{ '/bin/' => '6' },
{ '/dev/' => '2' },
{ '/tmp/' => '8' },

哈希非常适合分组。我们将遍历上面的列表,然后我们将遍历每个散列的元素,使用散列对它们进行分组。

my %grouped;
for my $inner (values(%$VAR1)) {
   for my $key (keys(%$inner)) {
      my $val = $inner->{$key};
      $grouped{$key} += $val;
   }
}

我们已经完成了。


推荐阅读