Какого размера файла мы говорим?
Одной из стратегий может быть чтение строк по одной за раз и загрузка их в структуру данных, которую можно легко проверить на наличие существующего элемента, например Hashset<int>
. Я знаю, что могу надежно хэшировать каждую строковую строку файла, используя GetHashCode () (используется для внутренней проверки равенства строк - это то, что мы хотим определить дубликаты), и просто проверять известные хэши. Итак, что-то вроде
var known = new Hashset<int>();
using (var dupe_free = new StreamWriter(@"c:\path\to\dupe_free.txt"))
{
foreach(var line in File.ReadLines(@"c:\path\to\has_dupes.txt")
{
var hash = line.GetHashCode();
if (!known.Contains(hash))
{
known.Add(hash);
dupe_free.Write(line);
}
}
}
Кроме того, вы можете воспользоваться Distinct()
методом Линка и сделать это в одной строке, как Блинди предложил:
File.WriteAllLines(@"c:\path\to\dupe_free.txt", File.ReadAllLines((@"c:\path\to\has_dupes.txt").Distinct().ToArray());