c#取出list不同

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

如果你想要比较两个 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);

你好,我根据你的要求重新编辑了答案,输出了两个坐标的不同之处,望采纳:
实体类:

  internal class Model
    {
        public string id { get; set; }
        public string x1 { get; set; }
        
        public string y1 { get; set; }
        public string x2 { get; set; }

        public string y2 { get; set; }

        public Model(string id,string x1,string y1,string x2,string y2)
        {
            this.id = id;
            this.x1 = x1;
            this.y1 = y1;
            this.x2 = x2;
            this.y2 = y2;
        }
    }

Main方法:

 Model l1 = new Model("001", "a1", "b1", "a1", "b2");
            Model l2 = new Model("001", "a1", "b1", "a1", "b3");

            List<string> list = new List<string>();

            list.Add(l1.x1);
            list.Add(l1.y1);
            list.Add(l1.x2);
            list.Add(l1.y2);
            list.Add(l2.x1);
            list.Add(l2.y1);
            list.Add(l2.x2);
            list.Add(l2.y2);
            
            for(int i = 0;i<list.Count/2;i++) 
            {
                if (list[i] != list[i + 4])
                {
                    Console.WriteLine("不同之处在第"+(i>2?2:1)+"个坐标的第"+(i%2==0?1:2) +"个参数分别为"+ list[i] + "和" + list[i + 4]);
                }
            }

循环挨个比较呗