2013-06-05 48 views

回答

2

使用散列。他們是重複數據刪除數據的典型方式:

my %data; 
while (<$fh>) { 
    .... # other code 
    $data{$key} //= $value; 
} 

的定義,或賦值運算符//=是做等價的:

if (not defined $data{$key}) { 
    $data{$key} = $value; 
} 

這意味着只有這關鍵的第一個值被保存。

請注意,帶散列的重複數據刪除僅適用於完全相同的字符串。

+0

對於文件大小大於1 GB的文件,Hash能夠有效地工作嗎? – david

+0

@david - 有足夠的記憶,是的。如有必要,將文件拆分成更小的部分,在每個部分找到唯一的行,然後在合併時重複數據刪除。 – 2013-06-05 15:07:05

+0

我其實不需要鑰匙。有沒有辦法避開鑰匙? – david

0

使用散列來跟蹤您已經看到的行。

my %seen; 
while (<$fh>) { 
    next if $seen{$_}++;  # duplicate 
    ... 
}