0
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人。
謝謝。
您好像在'@ sender'或'@ receiver'中重複了一遍。 (在'@ sender'中重複將增加'c1';在'@ receiver'中重複將增加'c2'。) – Amadan
是的。但我想要實現的是:首先,合併「發送者」(1000個值)和「接收者」(1000個值)並消除重複,這會創建具有1409個值(小於2000)的「合併」。其次,將這些1409值用作「散列」的鍵。 –
但「消除重複」無法正常工作。例如,如果'@ sender'具有'(「a」,「a」,「a」)和'@ receiver'具有'(「a」,「a」)'',那麼您會期望合併或者'(「a」)'(dedup)或'(「a」,「a」,「a」,「a」,「a」)'(無重複數據刪除);你有'(「a」,「a」,「a」)',這給你的差異。當你使用它們作爲散列鍵時,這會執行適當的重複數據刪除操作,並且只剩下'(「a」)','c1'和'c2'之間的差異爲2。 – Amadan