在csv文件中查找重复项目

本文关键字:项目 查找 csv 文件 | 更新日期: 2023-09-27 18:21:47

我有一个带有的CSV文件

FirstName LastName和ID列,ID是唯一列

Chris, Webber, 1 
Chris, Ben, 2
Chris, Dudley, 3
David, Floy, 4
Chris, Ben, 5 
Chris, Webber, 6

我需要在不使用DB的情况下获得两个列表,我需要从c#中的文件中读取它,并创建两个列表重复列表和originalList。

重复列表包含所有重复条目

Chris, Webber, 1
Chris, Webber, 6
Chris, Ben, 2
Chris, Ben, 5

"原始列表"具有唯一条目和第一个重复条目。

Chris, Webber, 1
Chris, Ben, 2
Chris, Dudley, 3
David, Floy, 4

解决这个问题的最佳方法是什么?

在csv文件中查找重复项目

var lines = File.ReadLines("yourFile.ext");
// this assumes you can hold the whole file in memory
// uniqueness is defined by the first two columns
var grouped = lines.GroupBy(line => string.Join(", ", line.Split(',').Take(2)))
                   .ToArray();
// "unique entry and first occurrence of duplicate entry" -> first entry in group
var unique = grouped.Select(g => g.First());
var dupes = grouped.Where(g => g.Count() > 1)
                   .SelectMany(g => g);
Console.WriteLine("unique");
foreach (var name in unique)
    Console.WriteLine(name);
Console.WriteLine("'nDupes");
foreach (var name in dupes)
    Console.WriteLine(name);

输出:

唯一的Chris,Webber,1Chris,Ben,2岁Chris,Dudley,3岁大卫,弗洛伊,4岁DupesChris,Webber,1Chris,Webber,6岁Chris,Ben,2岁Chris,Ben,5岁

逐行读取,就像一个纯文本文件一样。

使用','上的string.split解析每一行

使用一个List跟踪ID,使用。包含

对数据本身使用自定义数据对象结构,并制作两个列表,一个用于唯一条目,另一个用于重复条目。(共3个列表)

如果你想要实际的代码示例,请列出你试图让我调试的东西以及错误。

  1. 创建一个字符串数组/Map/ArrayList/List,其中包含唯一的ID。---使用最适合与你一起工作的工具
  2. 逐行读取文件
  3. 检查ID是否已经是您创建的Array/Map/ArrayList/List的一部分——如果不是,请将其添加到数组列表中,如果是,则不要添加

当您将其添加到数组列表中时,您还可以将整行添加到数据集中,您可以使用该数据集存储您现在拥有的所有唯一记录。