C# 在csv文件中查找重复项

C# 在csv文件中查找重复项,c#,csv,C#,Csv,我有一个CSV文件 FirstName LastName和ID列,ID是唯一的列 我需要在不使用DB的情况下获得两个列表,我需要从c#中的文件中读取它,并创建两个列表副本列表和原始列表 重复列表包含所有重复项 Chris, Webber, 1 Chris, Webber, 6 Chris, Ben, 2 Chris, Ben, 5 原始列表具有唯一条目和第一次出现的重复条目 Chris, Webber, 1 Chris, Ben, 2 Chris, Dudley, 3 David, Floy,

我有一个CSV文件

FirstName LastName和ID列,ID是唯一的列

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

重复列表包含所有重复项

Chris, Webber, 1
Chris, Webber, 6
Chris, Ben, 2
Chris, Ben, 5
原始列表具有唯一条目和第一次出现的重复条目

Chris, Webber, 1
Chris, Ben, 2
Chris, Dudley, 3
David, Floy, 4
解决这个问题的最好办法是什么


逐行阅读,将其视为纯文本文件

使用
string.split
on'、'

使用一个
列表
跟踪ID,使用.Contains

对数据本身使用自定义数据对象结构,并创建两个列表,一个用于唯一项,另一个用于重复项。(共3份名单)

如果您想要实际的代码示例,请列出您尝试过让我调试的内容以及错误是什么

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);
输出:

unique Chris, Webber, 1 Chris, Ben, 2 Chris, Dudley, 3 David, Floy, 4 Dupes Chris, Webber, 1 Chris, Webber, 6 Chris, Ben, 2 Chris, Ben, 5 独特的 克里斯,韦伯,1岁 克里斯,本,2岁 克里斯,达力,3岁 大卫,弗洛伊,4岁 欺骗 克里斯,韦伯,1岁 克里斯,韦伯,6岁 克里斯,本,2岁 克里斯,本,5岁
  • 创建一个字符串数组/Map/ArrayList/List,它将保存唯一ID使用您最容易使用的工具
  • 逐行读取文件
  • 检查ID是否已经是您创建的Array/Map/ArrayList/List的一部分-如果不是,则将其添加到Array列表中,如果是,则不添加

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

    那么,您正在努力解决的是哪一部分,将数据读取到列表中还是将数据提取到两个列表中?我正在努力寻找基于performanceoh phooy的最佳解决方案,为他做所有的工作。就像答案一样,我从来没有想到在拆分时使用分组 unique Chris, Webber, 1 Chris, Ben, 2 Chris, Dudley, 3 David, Floy, 4 Dupes Chris, Webber, 1 Chris, Webber, 6 Chris, Ben, 2 Chris, Ben, 5