加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 散列哈希:如何获取密钥的出现次数?

发布时间: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];
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读