【发布时间】:2013-04-14 04:34:26
【问题描述】:
我有以下文本文件。
foo1 bam
foo1 bam
foo2 bam
foo1 zip
foo2 boo
foo1 zip
foo3 zip
我想制作一个哈希哈希,其中 KEY1 是 第一列,KEY2 是它发出的声音(第二列):bam, zip ,或boo,VALUE 是该声音的出现次数。这样数据结构是这样的:
$VAR1 = {
'foo1' => {
'bam' => [
2
],
'zip' => [
2
],
},
'foo2' => {
'bam' => [
1
],
'boo' => [
1
],
},
'foo3' => {
'zip' => [
1
],
}
}
这是我目前所拥有的
use strict; use warnings;
open(my $fh, '<', 'file.txt') or die $!;
my %HoH;
while(<$fh>){
chomp;
my @cols = split(/\t/, $_);
my $KEY1 = $cols[0];
my $KEY2 = $cols[1];
push( @{$HoH{$KEY1}{$KEY2}}, 1); # This actually creates a hash of hash of arrays
}
my %HoH_final;
foreach my $KEY1 (%HoH) {
foreach my $KEY2 (keys %HoH{$KEY1}){
my $count = scalar @{$HoH{$KEY1}{$KEY2}}; # get the size of that array
push( @{$HoH_final{$KEY1}{$KEY2}}, $count);
}
}
你怎么看?
【问题讨论】: