首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >功能说明:删除哈希表中的key

功能说明:删除哈希表中的key
EN

Stack Overflow用户
提问于 2017-03-10 19:01:49
回答 1查看 54关注 0票数 0

我是一名Perl程序员初学者,我正在寻求关于上面代码的一些解释。这个函数被命名为delete_depth_hash,但我不明白它是如何工作的。

代码语言:javascript
复制
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;
} 
EN

回答 1

Stack Overflow用户

发布于 2017-03-10 19:09:10

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

代码语言:javascript
复制
use Data::Dumper;
print Dumper({ delete_depth_hash( a => { b => 1, c => 2 } ) });

它输出:

代码语言:javascript
复制
$VAR1 = {
          'a' => 3
        };

因此,它基本上是对数字求和,而不考虑散列中的子键。注意,scalar在这里什么也不做,因为散列的值必须始终是标量。

由于内键刚刚被删除,您可以使用List::Utilsumvalues函数来简化代码:

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42716783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档