计算文本文件中的单独行数

本文关键字:单独行 文本 文件 计算 | 更新日期: 2023-09-27 18:18:04

我有一个14000行文本文件,但其中许多是重复的。我想计算唯一的行,但是我只能访问框架3.0及以下版本。不使用。linq是否可以做到这一点?

计算文本文件中的单独行数

当然这是可能的,您可以使用StreamReader.ReadLine循环遍历每行,并将每行添加到HashTable结构中,使用该行作为键并使用一些虚拟对象作为值。在添加字符串之前,您应该检查HashTable是否已经有键:

HashTable uniqueLines = new System.Collections.HashTable();
string line;
// Read each line of the file until the end
while ((line = reader.ReadLine()) != null)
{
  // Check that we have not yet seen this string before
  if(uniqueLines.ContainsKey(line) == false) 
  {
    uniqueLines.Add(line, 0);
    // You can write the lines to another file in necessary
    writer.WriteLine(line);
  }
}

最后,HashTable中的项数应该等于文件中唯一的行数:

int count = uniqueLines.Count;
// And don't forget to close the reader (and writer)!

为什么这个工作?因为HashTable使用GetHashCode(0)返回的哈希码,并且根据MSDN:

如果两个字符串对象相等,GetHashCode方法返回相同的值。但是,没有唯一的哈希码值每个唯一的字符串值。不同的字符串可以返回相同的哈希值代码。

现在我不确定当两个不同的字符串具有相同的哈希码时它有多常见,但据我所知,许多LINQ方法在内部使用HashTable,所以这可能是最接近LINQ将做的。

我想你也可以用linq写。

     var result = from p in File.ReadAllLines(filepath)
         group p by p into g
         select new { Key = g.Key, Count = g.Count() };

这是可以理解的。