c# 删除重复算法 LINQ

标签 c# linq csv datatable

我有一个 csv 文件,如下所示:学生姓名、地址。

但是,学生姓名列可能有重复项,所以如果是这种情况,我需要创建一个仅包含那些重复的学生姓名和地址的新文件 - 继续操作,直到每个文件在特定文件中都没有重复的学生姓名。

即。

Student Names   Address
John            5 West st.
David           42 Alan st.
John            22 Dees st.
Smith           2 King st.
David           77 Jack st.
John            33 King st.

应该像这样分成3个文件: 第一个文件:

Student Names   Address
John            5 West st.
David           42 Alan st.
Smith           2 King st.

第二个文件:

Student Names   Address
John            22 Dees st.
David           77 Jack st.

第三个文件:

Student Names   Address
John            33 King st.

我的逻辑是将文件放入 DataTable 中,然后创建一个包含学生姓名 -> 地址的字典——但是,字典将不起作用,因为它们的键不是唯一的。所以我的下一个逻辑是创建一个学生姓名列表并从那里找出重复项并创建一个数据表并从那里创建一个文件。我觉得这更复杂,因为它是 - 我很确定 LiNQ 中一定有更简单的方法 - 你们能帮我解决问题或提出一些建议吗。

谢谢。

最佳答案

Dictionary 方法实际上非常好。我会坚持下去。将字典的键、名称和值设为地址。这样您就可以通过查找具有最多地址的名称来知道需要创建多少个文件。地址数将是您需要创建的文件数。

然后遍历名称列表并添加它们和地址以按顺序分隔文件。然后,一旦所有的名字都用完了,你就完成了。

在你上面的例子中,你将有一个这样的字典

John -> 5 West st., 22 Dees st., 33 King st.
David -> 42 Alan st., 77 Jack st.    
Smith -> 2 King st.

正如@ric 所说,这将是一个 Dictionary<string, List<string>>

关于c# 删除重复算法 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655229/

相关文章:

c# - 在 visual studio 2012 中查找所有注释行

c# - 在 IEnumerable<dynamic> 上使用 LINQ 时出现编译器错误,但如果先将其转换为 IEnumerable<dynamic> 则不会

php - 通过 CSV 内容 DELETE FROM 查询 MySQL

python - csv中什么类型的数据在mysql和pandas中加载后将为空

java - 初始创建后将文本文件重新加载到数据库中

c# - 如何使用 nuget 包资源管理器创建包含发布和调试 dll 的 nuget 包?

c# - 使用在 Generic 类中创建的 Func<string> 调用时 RuntimeHelpers.PrepareMethod 不起作用

c# - 使用 LINQ 在 C# 中使用 MasterMind 评分算法

c# - IEnumerable 返回优先

c# - 如果某个进程在没有计时器的情况下运行,请执行某些操作