perl - 合并 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'
};
解决方案
您不关心外部哈希的键。所以让我们开始吧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;
}
}
我们已经完成了。
推荐阅读
- javascript - 带有改变 redux 状态的原型的数组
- ruby - 重复调用 Rake 任务
- c# - User 对象上的静态扩展方法是否安全?
- php - 保持前导零列Mysql
- amazon-s3 - 当键是文件列表时如何修改S3复制源
- java - 如何解决由于继承类而导致的 org.hibernate.MappingException
- r - 我什么时候需要在 if 语句周围加上括号来控制 R 中公式的顺序?
- asp.net - 即使配置文件正确,网站也会出现 IS 500.19 错误
- ruby-on-rails - 导轨中的三重嵌套模型形式显示错误
- azure-functions - 从 Azure 函数创建 csv 并上传网络文件夹