c# ,有两个list;结构为编码,位置1,位置2;当list1中的元素为编码:001,位置1:a1,b1,位置2:a1,b2;list2中的元素为编码:001,位置1:a1,b1,位置2:a1,b3;请问,如何判断这两个list的不同并取出不同处b3
如果你想要比较两个 List 并取出不同之处,你可以使用 Linq 来实现。
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" 。
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]);
}
}
循环挨个比较呗