数组 – 散列哈希:如何获取密钥的出现次数?
发布时间:2020-12-15 23:25:38 所属栏目:大数据 来源:网络整理
导读:我有以下文本文件. foo1 bamfoo1 bamfoo2 bamfoo1 zipfoo2 boofoo1 zipfoo3 zip 我想做一个Hash of Hashes,其中KEY1是第一列,KEY2是它产生的声音(第二列):bam,zip或boo,VALUE是该声音的出现次数.这样的数据结构是这样的: $VAR1 = { 'foo1' = { 'bam' = [ 2
我有以下文本文件.
foo1 bam foo1 bam foo2 bam foo1 zip foo2 boo foo1 zip foo3 zip 我想做一个Hash of Hashes,其中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); } } 你怎么看? 解决方法
你真的不想要以下数据结构吗?
{ '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]; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |