找到列表之间的差异

时间:2010-08-11 04:21:08

标签: c# generics list

我有List<my_Custom_Class> and List<string>。我的自定义类有各种项目,其中一个是DCN编号,list<string>只包含DCN编号。所以我需要查看List<Custom_Class> contains any dcn from List<string>.

例如假设List1 = List<Custom_Class> and List2 = List<String>。如果List1有2000个项目,list2有40000个项目,List2中存在来自List1的600个项目。所以在这种情况下我需要1400作为我的输出List作为list1。那么表达方式是什么呢? 此外还有一个案例,因为List1包含各种项目,其他项目值可能不同但DCN必须相同。我只需要检查DCN的相似性。

以下是我的课程。现在从datatable我将DCN添加到List<String> Dcns;

 public class DocumentInfo
    {

        public string ImageType { get; set; }
        public string FileFullPath { get; set; }
        public string BatchName { get; set; }
        public string FileName { get; set; }
        public string DCN { get; set; }
        public string MemberID { get; set; }
        public string NPI { get; set; }
        public string TaxID { get; set; }
        public string Client { get { return DCN.Substring(0, 2); } }
     }

所以在我的情况下我在List<string>Dcns and 110K DCNS in List<DocumentInfo>中有493K DCNS。我需要从110K DCN过滤重复记录。或者可以说减去两个列表。我需要删除List中存在的所有重复dcns。说如果70K记录重复,那么我的结果文档信息列表将是剩余的40K列表。区别/除外不起作用。 LINQ / Lambda Exp将是首选。

我迫切需要它,尽快。

先谢谢。

1 个答案:

答案 0 :(得分:3)

var dcnSet = new HashSet<string>(Dcns);
docInfoList.RemoveAll(el => dcnSet.Contains(el.DCN));

HashSet并非严格必要,但它在O(m * n)和O(m + n)之间产生差异,其中m和n是每个列表中元素的数量。< / p>

编辑:

RemoveAll从现有的List中删除元素。它不会创建新的List。它返回删除的元素数,但如果你不关心它,你可以放弃返回值。