从列表中查找在其他列表中具有唯一值(仅限非重复)的所有项目

时间:2021-02-18 10:28:50

标签: c# linq

我有两个包含数据的列表,如下例

var listA = new[]{ "A", "B", "C", "D", "B", "E", "C", "F", "G"};
var listB = new[]{ "A", "B", "C", "E" };

listA 可以有重复的值。

我需要使用 LINQ 或 C# 从 listB 中查找在 listA 中具有唯一值(仅限非重复)的所有项目。

预期结果 listC 应该是这样的

listC = {A, E};

我正在使用以下代码

   var list = listA.GroupBy(x => x).All(g => g.Count() == 1);
   var listC = list.Except(listB).ToList();

2 个答案:

答案 0 :(得分:0)

  • 您会在每个集合的自己的集合中找到不重复的元素。
  • 然后,与另一组交集。

您可以使用 contains() 方法,因为它们属于 string 类型。

答案 1 :(得分:0)

var listA = new[]{ "A", "B", "C", "D", "B", "E", "C", "F", "G"};
var listB = new[]{ "A", "B", "C", "E" };
var listC = listB.Where(x=>listA.Where(y=>y==x).Count() == 1);        
foreach(var item in listC) Console.WriteLine(item);

我能想到的最简单最天真的解决方案。不过闻起来像作业。