比较两个List <string>并打印重复项

too*_*121 8 c# linq

在比较两个List<T>对象时,我无法保留重复项.目标是将重复项添加到第三个列表中,然后调用它list3.

list1 有大约5项,而list2有10项.

list3 应包含以下内容: 00T51234, 00T54567, 00T57894

List<string> list1 = new List<string>(){"00T51234", "00T54567", "00T57894",
                     "00T55263", "00T58965"};

List<string> list2 = new List<string>(){"00T59633", "00T52222", "00T57894", 
                     "00T52322", "00T51234", "00T54567", "00T57894", "00T57897",
                     "00T55556", "00T59563"};

List<string> list3 = new List<string>();
Run Code Online (Sandbox Code Playgroud)

我试图使用Ani的解决方案,如下所示:

var lookup2 = list2.ToLookup(str => str);

var result = from str in list1
         group str by str into strGroup
         let missingCount 
              = Math.Max(0, strGroup.Count() - lookup2[strGroup.Key].Count())
         from missingStr in strGroup.Take(missingCount)
         select missingStr;
Run Code Online (Sandbox Code Playgroud)

然而,这个解决方案并没有给我我正在寻找的结果.任何帮助将不胜感激.谢谢!

Sac*_*hin 23

使用Enumerable.Intersect方法

List<string> duplicates = list1.Intersect(list2).ToList();
Run Code Online (Sandbox Code Playgroud)

  • @ toose121它不是_exactly_相反 - "a.Except(b)`会给你在`a`但不在'b`中的项目 - 它不会给你'b`中不在'b`中的项目了`. (2认同)