计算文本文件中的单独行数
本文关键字:单独行 文本 文件 计算 | 更新日期: 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() };
这是可以理解的。