是否有一种有效的方法可以查看,如果哈希键分配导致添加新项目或修改现有项目?行为与此Bloom's filter implementation中的add
函数类似。
在下面的构造中,执行了两次查找:一次显式地使用exists
,另一次是在赋值期间隐式执行。因此,第一次查找在逻辑上是多余的。
my %hash;
my $key;
...
my $existed = exists $hash{$key};
$hash{$key} = 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;