计算文本文件c#中各行的数量

时间:2011-12-17 18:41:19

标签: c#

我有一个14000行的文本文件,但其中许多都是重复的。我想计算独特的行,但我只能访问框架3.0及以下。是否可以在不使用.linq的情况下执行此操作?

2 个答案:

答案 0 :(得分:3)

当然有可能,您可以使用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的功能。

答案 1 :(得分:0)

我想你也可以用linq写的。

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

这是可以理解的。