【发布时间】:2016-03-12 13:56:09
【问题描述】:
我有一个名为Customer 的类,它有几个字符串属性,例如
firstName, lastName, email, etc.
我从创建类数组的csv 文件中读取客户信息:
Customer[] customers
我需要删除具有相同电子邮件地址的重复客户,每个特定电子邮件地址只保留 1 条客户记录。
我已使用 2 个循环完成此操作,但需要将近 5 分钟,因为通常有 50,000 多个客户记录。完成删除重复项后,我需要将客户信息写入另一个 csv 文件(此处无需帮助)。
如果我在循环中执行Distinct,我将如何删除属于该特定客户的类的其他字符串变量?
谢谢, 安德鲁
【问题讨论】:
-
这个想法是每天/每周/每季度运行一次吗?此任务的频率可能会决定解决方案的持久性。
-
如果不使用新的相等比较器,Distinct 将不适用于自定义类型。使用 MoreLinq 中的 DistinctBy。顺便说一句,对于 50k 个项目,此操作不会花费太多时间,因为 distinct 是
O(n) -
我的选择可能是通过重复键(在您的情况下为电子邮件)对输入文件进行排序,并在添加到您的对象之前对当前值进行简单的比较。
-
我会使用
KeyedCollection(在System.Collectons.ObjectModell)。让电子邮件成为 Key 并在检查Contains后插入。这非常快......
标签: c# arrays class duplicates