Perl 哈希:将值分配给键并查看键是否已定义

Perl hashes: assign value to a key and see if the key was defined

是否有一种有效的方法来查看散列键分配是否导致添加新项目或修改现有项目?与此 Bloom's filter implementation.

中的 add 函数的行为类似

在下面的构造中执行了两次查找:一次是显式地使用 exists,另一次是在赋值期间隐式地进行。因此,第一次查找在逻辑上是多余的。

my %hash;
my $key;
...
my $existed = exists $hash{$key};
$hash{$key} = 1;

"item",我想你的意思是 "key"。

如果该值没有意义,可以使用如下:

my $dup = $hash{$key}++;

如果该值有意义,可以使用以下方法:

my $dup = exists($hash{$key});
$hash{$key} = $val;

如果值有意义但总是被定义,您可以使用以下方法:

my $ref = $hash{$key};
my $dup = defined($$ref);
$$ref = $val;

顺便说一下,第一个片段可以轻松扩展以从列表中过滤掉重复项。

my %seen;
my @unique = grep !$seen{$_}++, @list;