2

我需要解析一个大文件(超过 500 MB)并获得唯一的行。事实上,我需要第一次出现独特的线条。

当我的 RAM 有限时,您能否建议有效的方法来完成这项工作?

4

2 回答 2

2

使用哈希。它们是重复数据删除的典型方法:

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

定义或赋值//=运算符等价于:

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

这意味着仅保存此键的第一个值。

请注意,使用哈希的重复数据删除仅适用于完全相同的字符串。

于 2013-06-05T14:50:07.070 回答
0

使用哈希来跟踪您已经看到的行。

my %seen;
while (<$fh>) {
   next if $seen{$_}++;      # duplicate
   ...
}
于 2013-06-05T15:15:02.157 回答