perl - 使用散列数组的散列作为计数器
问题描述
尝试解析具有公共元素的数组以创建包含计数信息的新哈希。我试图创建的结构是这样的:
{
var1 => [
cat1 => 50,
cat2 => 3,
cat3 => 5
],
var2 => [
cat2 => 12,
cat4 => 4,
cat5 => 1
]
}
我知道如何制作数组的散列,但我不太清楚如何让内部数组表示上面的计数散列。我拥有的数据结构是一个数组数组,其中包含更多元素。但是,作为一个玩具示例,这是我正在尝试使用的内容:
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
use Data::Dump;
my @array = (
["cat1", "var1"],
["cat2", "var1"],
["cat2", "var1"],
["cat2", "var2"],
["cat1", "var1"],
["cat1", "var1"],
);
my %counts;
for my $elem (@array) {
push(@{$counts{$elem->[1]}}, $elem->[0]);
}
dd \%counts;
我不知道如何修改该push()
调用以推送一个匿名数组,该数组的计数源自循环@array
(坏名,我知道..仅用于演示目的)。
我想我可以分两步做到这一点。但是,当我将元素加载到%counts
. 有人可以告诉我我要去哪里错了吗?
解决方案
您预期的数据结构有缺陷。您需要第二级的哈希引用。
{
var1 => [ # {
cat1 => 50,
cat2 => 3,
cat3 => 5
], # }
var2 => [ # {
cat2 => 12,
cat4 => 4,
cat5 => 1
] # }
}
使用数组,您不能正确地拥有键/值对,最终只能得到一个有序列表。
使用哈希后,您可以简单地使用 var 作为第一个键并计算其中的猫。任何地方都不需要push
任何东西。Perl 的自动生成将负责为您创建所有内容。
my %counts;
foreach my $elem (@array) {
# var cat
$counts{ $elem->[1] }->{ $elem->[0] }++;
}
输出:
{
var1 {
cat1 3,
cat2 2
},
var2 {
cat2 1
}
}
查看perldsc、perlref和perlreftut以获取更多信息。
推荐阅读
- python - 正则表达式代码,如何解决一些数据输入错误
- php - 如何将第三方库集成到 october cms 中?
- node.js - Next JS - API Routes - 默认错误处理,如 Express.js
- python - Keras 中的连接层
- vector - 动态处理矢量元素,性能好
- python - Tweepy Status.text 不返回全文
- vba - 如何从字符串执行 VBA 脚本?
- javascript - 为什么我的点符号访问 5 层 json 对象返回 null?
- kotlin - 为 var 类成员设置一个可以更改的新值是类型吗?
- javascript - 将字符串分成 3 部分,前 2 个单词为单词,最后 2 个单词为混合单词