gpt4 book ai didi

从数组派生的 perl 散列不能按预期工作

转载 作者:行者123 更新时间:2023-12-02 06:36:44 25 4
gpt4 key购买 nike

我在使用从数组派生的散列时遇到了一些问题。对于我知道存在的元素,它没有通过“存在”测试。我写了小测试代码来确认这一点。在这里:

#!/usr/local/bin/perl

my @sieve = (2, 3, 5, 7, 11, 13, 17, 19);
my %sieve_hash = @sieve;


foreach $prime (@sieve) {
if (exists($sieve_hash{$prime})) {
print "$prime exists!\n";
} else {
print "$prime DOES NOT exist.\n";
}
}

这是示例输出:

2 exists!
3 DOES NOT exist.
5 exists!
7 DOES NOT exist.
11 exists!
13 DOES NOT exist.
17 exists!
19 DOES NOT exist.

我做错了什么?

最佳答案

当分配给哈希时,需要一个交替键和值的列表。以下将解决您的问题:

my %sieve_hash = map { $_ => 1 } @sieve;

有了上面的内容,一个简单的真值测试(而不是存在测试)就足够了。但是由于您使用的是存在性测试,您可以通过使用以下分配 undef 而不是 1 来节省一些内存:

my %sieve_hash;
@sieve_hash{ @sieve } = ();

my %sieve_hash;
$sieve_hash{$_} = undef for @sieve;

不过,我发现真值测试要优雅得多。

关于从数组派生的 perl 散列不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com