qq_37727187 2023-01-10 17:20 采纳率: 96%
浏览 56
已结题

c#取出list不同

c# ,有两个list;结构为编码,位置1,位置2;当list1中的元素为编码:001,位置1:a1,b1,位置2:a1,b2;list2中的元素为编码:001,位置1:a1,b1,位置2:a1,b3;请问,如何判断这两个list的不同并取出不同处b3

  • 写回答

3条回答 默认 最新

  • ShowMeAI 2023-01-10 17:47
    关注

    如果你想要比较两个 List 并取出不同之处,你可以使用 Linq 来实现。

    • 首先使用 Except() 方法来比较两个 List,并取出不同之处。 然后使用 .Where() 方法来筛选位置2不同的元素。
    var list1 = new List<(string Code, string Position1, string Position2)> 
    {
        ("001", "a1", "a1,b1"),
        ("002", "a2", "a2,b2"),
    };
    var list2 = new List<(string Code, string Position1, string Position2)> 
    {
        ("001", "a1", "a1,b1"),
        ("002", "a2", "a2,b3"),
    };
    
    var different = list1.Except(list2).Where(x => x.Position2 != "a1,b1").ToList();
    foreach (var d in different)
        Console.WriteLine(d.Position2);
    

    代码会输出 "a2,b3" 。

    • 也可以使用 GroupJoin 来实现。 这样可以根据Code筛选出相同Code的元素进行比较。
    var diff = list1.GroupJoin(list2,
                                a => a.Code,
                                b => b.Code,
                                (a, b) => new { a, b })
                    .SelectMany(x => x.b.DefaultIfEmpty(), (x, y) => new { x.a, y })
                    .Where(x => !x.a.Equals(x.y))
                    .Select(x => x.a.Position2);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 宝塔ssl证书一直待待验证
  • ¥15 相近语义 不同表达 匹配
  • ¥15 [vasp+phonopy]表面模型的间隙扩散系数中尝试频率如何用声子频率计算
  • ¥15 现在新建了一个f1的就不行了包括所有新建的项目都无法生成,路径命名都没问题,keil和cubemx重装过还是不行,如何解决?(标签-java|关键词-固件)
  • ¥15 web前端开发怎么实现像图片这样的页面啊?
  • ¥15 ubuntu 20.04 网卡启用后,只有ipv6 没有 ipv4 无法上网
  • ¥15 QT任务管理器无法正确获取展开,有悬赏15元速求,如何解决?(相关搜索:标识符|结构体)
  • ¥15 使用delphi 10.3+intraweb 生成的页面怎么实现自动滚屏
  • ¥20 思科:Router c3600 MN-4E插槽
  • ¥15 16进制修改视频的元数据