Как узнать количество ключей в 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";
}
Другие вопросы по тегам