我现在正在写一些以前的实习生写的代码。我不熟悉Perl,因此在理解他的代码的实际功能时遇到了一些问题。所以它看起来是这样的:
$Hash{Key1}{Key2}++; 原始代码是:
$genotypes_parent2_array{$real_genotype}{$individu_depth}++; 我过去常常看到这种形式的散列$Hash{Key}以获取值,但我很难处理这个。外面有什么帮助吗?谢谢!
发布于 2017-03-09 17:09:05
%Hash是散列的散列。
这些代码将1添加到$Hash{Key1}{Key2}的值中,该值是散列元素的值。
发布于 2017-03-09 17:46:58
%genotypes_parent2_array是一个哈希(所以这不是一个很好的变量名称!)散列中的每个值都是一个散列引用。因此,实际上你有一个散列的散列。
$genotypes_parent2_array{$real_genotype}在散列中查找密钥$real_genotype。这个值(正如我们上面所说的)是一个散列引用。如果您有一个散列引用,那么您可以使用箭头在引用的散列中查找值。因此,我们可以使用如下代码在第二级散列中获得一个值:
$genotypes_parent2_array{$real_genotype}->{$individu_depth}但是,Perl有一块很好的语法糖。当你有两对紧挨着的“查找括号”时(就像我们这里),你可以省略箭头。因此,您可以使用以下命令获得完全相同的效果:
$genotypes_parent2_array{$real_genotype}{$individu_depth}这就是我们所拥有的。我们在散列%genotypes_parent2_array中查找密钥$real_genotype。这给了我们一个散列引用。然后,我们在引用的数组中查找键$individu_depth,这给出了二级散列中的值。然后,您的代码会递增该值。
手册页perldoc perldsc很好地介绍了如何在Perl语言中使用引用来构建复杂的数据结构。此外,我发现Data::Dumper在显示复杂数据结构方面非常有用。
https://stackoverflow.com/questions/42691006
复制相似问题