-2

各グループのエントリー数を取得したいのですが、間違った答えを出しているようです。各グループには、繰り返される要素があります。私が得ている結果は意味がありません。私は何を間違っていますか?

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";
}
4

1 に答える 1

0

グループ内の要素を繰り返すことができ、これらの重複をカウントする必要がある場合は、次のようなことを行う必要があります。

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";
}
于 2013-02-27T03:06:03.647 に答える