在文本文件中查找唯一条目

时间:2011-11-25 21:07:47

标签: c# .net-3.5

我有一个已导入控制台的文件:我希望搜索其中的唯一条目,例如:

tom 
tim
tim
tom
alan

当我搜索文件时,我想计算文件中唯一行的数量。

我正在使用.NET Framework 3.5,因此我无法使用System.Linq。有什么建议?除了升级到.NET 4

2 个答案:

答案 0 :(得分:4)

使用LINQ扩展方法DistinctCount非常简单:

int numberOfUniqueLines = File.ReadAllLines(filename).Distinct().Count();

关于这个:

  

我使用框架3.5所以不能使用system.linq任何建议?

.NET 3.5中提供了 LINQ 。但是,如果您使用的是.NET 2.0,则可以使用字典:

Dictionary<string, object> uniqueLines = new Dictionary<string, object>();
foreach (string line in File.ReadAllLines(filename)) {
    uniqueLines[line] = null;
}
int numberOfUniqueLines = uniqueLines.Keys.Count;

答案 1 :(得分:3)

遍历文件中的行。 将每行添加到HashSet<string>。 返回Count的{​​{1}}属性。

示例:

HashSet<string>
编辑我最初有int lineCount = new HashSet<string>(File.ReadAllLines(fileName)).Count; ,因为如果你有很多重复的行会使用更少的内存。该方法是在.NET 4中引入的,因此在规定的要求下无法使用。

EDIT2 System.Core.dll是框架3.5的一部分,所以你真的应该能够在某个地方找到它(也许是GAC?)。但是,如果你不能,你可以通过将行加载到File.ReadLines,对其进行排序,然后仅在项目与前一项目不同的情况下对项目进行计数来实现目标(请注意,如果任何项目失败,则会失败)在列表中为null):

List<string>