我有以下文本文件。
foo1 bam
foo1 bam
foo2 bam
foo1 zip
foo2 boo
foo1 zip
foo3 zip
我想制作一个Hash of Hashes,其中KEY1为第一列,KEY2是它所发出的声音(第二列):bam
,{ {1}}或zip
,VALUE是该声音的出现次数。这样的数据结构是这样的:
boo
这是我到目前为止所拥有的
$VAR1 = {
'foo1' => {
'bam' => [
2
],
'zip' => [
2
],
},
'foo2' => {
'bam' => [
1
],
'boo' => [
1
],
},
'foo3' => {
'zip' => [
1
],
}
}
您怎么看?
答案 0 :(得分:5)
您真的不想要以下数据结构吗?
{
'foo1' => {
'bam' => 2,
'zip' => 2,
},
...
}
如果是的话,
while (<$fh>) {
chomp;
my @cols = split /\t/;
++$HoH{ $cols[0] }{ $cols[1] };
}
如果你真的想要单元素数组,
while (<$fh>) {
chomp;
my @cols = split /\t/;
++$HoH{ $cols[0] }{ $cols[1] }[0];
}
答案 1 :(得分:3)
为什么每个二级键都指向一个arrayref而不是数字?我建议这样做:
while(<$fh>){
chomp;
my @cols = split(/\t/, $_);
$HoH{ $cols[0] }{ $cols[1] }++;
}
当遇到每个二级密钥时,它将增加(++
)的值。
答案 2 :(得分:3)
实际上这可以解决问题
perl -F'\t' -ane'$h{$F[0]}{$F[1]}++'
如果要查看结果
perl -MData::Dumper -F'\t' -ane'$h{$F[0]}{$F[1]}++}{print Dumper(\%h)'