gpt4 book ai didi

C# 从大文本文件中删除重复项

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:30 25 4
gpt4 key购买 nike

<分区>

我有一个 C# 应用程序,除其他外,它需要删除重复的行,并将该行出现的次数附加到该行的末尾。

文件可能非常大,从我的角度来看,我不能假设对文件大小有任何限制。

看来我处理这个文件的最佳方式是逐行处理。

删除重复项很好 - 我有以下内容(来自这个问题 Remove Duplicate Lines From Text File? ):

using (TextReader reader = File.OpenText(newFilePath))
using (TextWriter writer = File.CreateText(aggregateFilePathBase))
{
string currentLine;
var previousLines = new HashSet<string>();

while ((currentLine = reader.ReadLine()) != null)
{
if (previousLines.Add(currentLine))
{
writer.WriteLine(currentLine);
}
else
duplicateArray.Add(currentLine);
}
}

我的问题是我可以轻松识别并删除重复项,但附加计数证明是有问题的。如您所见,我有一个数组,其中包含所有重复项的列表。然后我可以使用它来获取重复项并生成新行,如下所示:

if (duplicateArray.Count() > 0)
{
var duplicateGroups = duplicateArray.GroupBy(x => x);
foreach (var duplicate in duplicateGroups)
{
var duplicateCount = duplicate.Count() + 1;
var newLine = duplicate.First() + "," + duplicateCount;
}
}

问题是将计数写入文件。我可以重新运行读/写过程,但我的问题是,根据对具有 150m 行的文件的一些计算,此写入将花费 30 多个小时。所以在这种情况下,需要60个小时才能去重。

谁能提出更快的方法。

我假设将整个文件读入内存并进行查找和替换不是一种选择,因为文件太大而无法加载到内存中......

编辑:考虑更多之后,我想我可能还会遇到 HashSet 的问题,因为它实际上会反射(reflect)文件的大小,因此将被限制为 2GB - 这是否正确?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com