my %seen;
@seen{@sender} = ();
my @merged = (@sender, grep{!exists $seen{$_}} @receiver);
my $c1 = @merged;
print $c1, "\n";
@hash{@merged} = ();
my @email = keys %hash;
my $c2 = @email;
print $c2, "\n";
这是我在标题中为此目的编写的代码部分。
c1打印1409,而c2打印仅493。 我想知道哪里出错了几乎缺少1000个元素(不在哈希的密钥中)?
或者,如果我这样做:
foreach (@merged) {
$hash{$_} = ();
}
# @hash{@merged} = ();
my @email = keys %hash;
分配键,它仍然只给我493个键,几乎缺少1000个键。
感谢。
答案 0 :(得分:2)
my %seen;
@seen{@sender} = ();
my @merged = (@sender, grep{!exists $seen{$_}} @receiver);
混合使用两种方法来查找唯一值,而不做任何一项。要获取唯一值,请将上面的内容更改为
my %seen;
@seen{@sender} = ();
@seen{@receiver} = ();
my @merged = keys(%seen);
或
my %seen;
my @merged = grep !$seen{$_}++, @sender, @receiver;
后者保留了秩序。