arrays - Perl,将数组 : adding and removing keys, 的散列添加到数组中,全部在 while 循环中

标签 arrays perl hash while-loop add

我有一个散列,它应该包含链接到它们自己的数组的某些键。更具体地说,散列键是质量值,数组是序列名称。如果已经有该质量的数组,我想将序列名称添加到与相关质量相关联的数组中。如果没有,我想创建一个并将序列名称添加到其中。所有这些都是在一个 while 循环中完成的,一个一个地遍历所有序列。

我已经尝试做类似 Perl How do I retrieve an array from a hash of arrays? 中的事情但我似乎做对了。

我刚收到这些错误消息: 标量值 @{hash{$q} 在 asdasd.pl 第 69 行最好写成 ${hash{$q}。 全局符号“@q”需要明确的包名称 asdasd.pl 第 58 行。 还有其他一些。

这是我尝试过的一个例子:

my %hash;
while (reading the sequences) {
    my $q = "the value the sequence has";
    my $seq = "the name of the sequence";

    if (exists $hash{$q}) {
        push (@{$hash{$q}}, $seq);
    } else {
        $hash{$q} = \@q;
        $hash{$q} = [$seq];
        next;
    }
}

这显然不应该是一个非常复杂的问题,但我是 perl 的新手,这种问题感觉很难。我从不同的地方用谷歌搜索了这个,但似乎有一些我没有意识到的东西,而且它可能也很明显。

最佳答案

您可以使用 perl 调用的autovivification 来使这变得非常简单。您的代码不需要中央 if 语句。您可以将其归结为:

    push @{ $hash{$q} }, $seq;

如果特定键在散列中还不存在,perl 将自动生成它,因为它可以推断出您需要此处的数组引用。

您可以通过谷歌搜索找到更多关于自动激活的资源。这是一个足够独特的词,绝大多数点击似乎都是相关的。 :-)

关于arrays - Perl,将数组 : adding and removing keys, 的散列添加到数组中,全部在 while 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571672/

相关文章:

arrays - 创建要添加到数组的pscustomobject的正确方法

java - 使用 for 循环将一个数组分配给另一个数组

perl - Sleep vs Usleep 选择哪一个? (Perl)

arrays - 如何从 perl 中的数组中过滤掉空哈希值?

javascript - 如何删除两个javascript数组之间的重复元素?

c - 如何知道传递给函数的 char 数组的大小(以字节为单位)?

perl - 为什么 "package"关键字有时会用注释与包名隔开?

perl - 使用 find 命令在文本编辑器中打开多个文件

delphi - 在 Delphi 中将 GetHashCode 的 double 转换为整数

java - SHA 哈希在 Java 中表现异常 - 提供代码