功能说明:删除哈希表中的密钥

时间:2017-03-10 11:01:49

标签: perl

我是Perl程序员初学者,我正在寻找有关上述代码的一些解释。该函数名为delete_depth_hash,但我无法理解它是如何工作的。

sub delete_depth_hash {
    my (%hash_genotype_depth) = @_; 
    my %new_hash;

    foreach my $geno(keys %hash_genotype_depth) {
        foreach my $dep(keys %{$hash_genotype_depth{$geno}}) {
            my $frequence = scalar($hash_genotype_depth{$geno}{$dep}); 
            $new_hash{$geno} +=$frequence; 
        }
    }

    return %new_hash;
} 

1 个答案:

答案 0 :(得分:2)

行为可以用一个例子来解释:

use Data::Dumper;
print Dumper({ delete_depth_hash( a => { b => 1, c => 2 } ) });

输出:

$VAR1 = {
          'a' => 3
        };

因此,它基本上对数字进行求和,而不管哈希散列中的子键。请注意,scalar在此处不执行任何操作,因为哈希值必须始终为标量。

由于刚删除了内部核心,您可以使用List::Util sumvalues函数简化代码:

use List::Util qw{ sum };

sub delete_depth_hash {
    my (%hash_genotype_depth) = @_;
    my %new_hash;
    for my $geno (keys %hash_genotype_depth) {
        $new_hash{$geno} = sum(values %{ $hash_genotype_depth{$geno} });
    }
    return %new_hash;
}