【问题标题】:Find all items from list which have unique values (non-duplicate only) in other [duplicate]从列表中查找在其他 [重复] 中具有唯一值(仅限非重复)的所有项目
【发布时间】:2021-05-21 07:03:51
【问题描述】:

我有两个数据列表,如下例所示

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();

【问题讨论】:

  • 恐怕这不是代码编写服务。你试过什么吗?你在哪里卡住了?
  • @DavidG 我猜这个骗子并不匹配。这个问题不是关于寻找骗子,而是关于找到那些没有骗子的元素。
  • @HimBromBeere 是的,你是对的。但答案是两个东西的组合,重复和交集,所以在列表中添加了更多链接。

标签: c# linq


【解决方案1】:
  • 对于每个集合,您会在自己的集合中找到不重复的元素。
  • 然后,与另一组相交。

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

【讨论】:

    【解决方案2】:
    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);
    

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

    【讨论】:

    • 如果闻起来像家庭作业,为什么要添加答案?
    • 你为什么觉得有必要对这里的所有内容发表评论?
    • 因为我关心这里发布的内容的质量。
    • 那你就明白为什么添加不必要的 cmets 直接和你的论点冲突了。
    • 如果我的 cmets 是不必要的,那你的回答说明了什么?
    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多