Perl在单个哈希本身中获取哈希键值计数

时间:2020-07-17 09:48:05

标签: perl hash

我编写了一个脚本,该脚本处理$data变量中的数据并获取每个键的值计数。

该脚本工作正常,但是我正在生成2个称为%data_hash%count_hash的哈希。一个用于存储数据,另一个用于获取这些键值的计数。

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my $data = "KEY1,VAL1
KEY2,VAL1
KEY1,VAL2
KEY1,VAL3
KEY1,VAL4
KEY2,VAL2
KEY2,VAL3
KEY2,VAL4
KEY1,VAL5
";

my (%data_hash, %count_hash);
foreach my $each_data (split /\n/, $data){
    my ($key, $val) = (split /,/, $each_data);
    push( @{$data_hash{$key}}, $val );
}

print Dumper(\%data_hash);

foreach my $key (sort keys %data_hash) {
    $count_hash{$key} = scalar @{$data_hash{$key}};
}

print Dumper(\%count_hash);

我可以使用单个哈希而不是2并通过保留数据来获得计数吗?

1 个答案:

答案 0 :(得分:2)

当然可以:

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my $data = "KEY1,VAL1
KEY2,VAL1
KEY1,VAL2
KEY1,VAL3
KEY1,VAL4
KEY2,VAL2
KEY2,VAL3
KEY2,VAL4
KEY1,VAL5
";

my (%data_hash, %count_hash);
foreach my $each_data (split /\n/, $data){
    my ($key, $val) = (split /,/, $each_data);
    push( @{$data_hash{$key}{vals}}, $val );
    $data_hash{$key}{num_vals}++;
}

print Dumper(\%data_hash);
相关问题