Как узнать количество ключей в perl-хэше?
Я хочу получить количество записей для каждой группы, но, похоже, это дает мне неправильный ответ. В каждой группе есть элементы, которые могут повторяться. Результаты, которые я получаю, не имеют смысла. Что я делаю неправильно?
my %hash;
while(<>)
{
chomp($_);
if(/(\d+)\t(\d+)/)
{
my $group = $1;
my $element = $2;
$hash{$group}{$element}=1;
}
}
foreach my $curr(keys %hash)
{
my $numElementsInCurr = keys %{$hash{$curr}};
print "$curr\t$numElementsInCurr\n";
}
1 ответ
Если элементы в группе могут повторяться, и вам нужно, чтобы ваш счет включал эти дубликаты, вам нужно будет сделать что-то более похожее на:
my %hash;
while(<>)
{
chomp($_);
if(/(\d+)\t(\d+)/)
{
my $group = $1;
my $element = $2;
++$hash{$group}{$element};
}
}
use List::Util 'sum';
foreach my $curr(keys %hash)
{
my $numElementsInCurr = sum values %{$hash{$curr}};
print "$curr\t$numElementsInCurr\n";
}