【问题标题】:How to get the number of keys in a perl hash of hashes?如何获取 perl 哈希中的键数?
【发布时间】:2013-02-12 17:06:55
【问题描述】:

我想获取每个组的条目数,但它似乎给了我错误的答案。每个组中都有可能重复的元素。我得到的结果没有意义。我做错了什么?

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

【问题讨论】:

  • 您确定您的输入格式正确吗?您可以使用 Data::Dumper 检查 %hash 以查看它是否符合您的预期。
  • 您应该提及为什么您认为它给了您错误的答案。只是发布代码做它应该做的根本不会有帮助。例如打印 %hash 的 Dumper 输出并显示循环的输出。
  • 你还没有完全证明这个问题。您的代码不太可运行(我已修复),但您没有提供导致错误发生的数据。获得您为该数据获得的输出以及您期望的输出也会很好。

标签: perl hash key hash-of-hashes


【解决方案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";
}

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2012-09-01
    • 1970-01-01
    • 2014-10-17
    • 2020-11-24
    • 2014-01-30
    • 2010-09-08
    • 2015-01-10
    • 1970-01-01
    相关资源
    最近更新 更多