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

时间:2015-07-10 17:47:22

标签: perl hashmap

是否有一种有效的方法可以查看,如果哈希键分配导致添加新项目或修改现有项目?行为与此Bloom's filter implementation中的add函数类似。

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

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

1 个答案:

答案 0 :(得分:3)

通过" 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;