我有以下文本文件。散列哈希:如何獲得一個鍵的出現次數?
foo1 bam
foo1 bam
foo2 bam
foo1 zip
foo2 boo
foo1 zip
foo3 zip
我想作哈希其中KEY1是一列的哈希,KEY2是它發出的聲音(列中有兩個):bam
,zip
,或boo
,和值是那聲音的出現次數爲。使得數據結構是這樣的:
$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);
}
}
你覺得呢?
是的,我認爲這是你寫的,我想要的。 – cooldood3490 2013-04-21 02:38:21
注意:'++'在沒有警告的情況下認爲undef爲零,所以在這裏完美。 – ikegami 2013-04-21 02:40:16