Lambda比较两个列表
本文关键字:两个 列表 比较 Lambda | 更新日期: 2023-09-27 18:01:52
我有三个类型为cab
的列表。我需要比较listA
和listB
。如果listB
中的Car-number
或status
与listA
中的相同,则我必须将listB
中的该行添加到listC' else add it to
列表A . I need to perform that same operation for all rows for
列表B`。如何在两个列表上编写lambda来执行此操作?
这是我目前拥有的代码:
public class cab
{
public string Name {get;set;}
public string Desc {get;set;}
public int Car_number {get;set;}
public bool status {get;set;}
}
cab c1 = new cab() { Name = "Zen",Desc = "äsdasdf",Car_number= "8832",status="false"};
cab c2 = new cab() { Name = "Ford",Desc = "sdfgedasdf",Car_number= "1132",status="true"};
cab c3 = new cab() { Name = "Swift",Desc = "sdsdf",Car_number= "732",status="true"};
List<cab> listA = new List<cab>();
listA.Add(c1);
listA.Add(c2);
listA.Add(c3);
List<cab> listB = new List<cab>();
cab c4 = new cab() { Name = "Santro",Desc = "iisdasdf",Car_number= "8832",status="false"};
cab c5 = new cab() { Name = "Ritz",Desc = "esddf",Car_number= "132",status="true"};
listB.Add(c4);
listB.Add(c5);
List<cab> listC = new List<cab>();
需要lambda的具体原因是什么?
这对你有用吗?
foreach (var bItem in listB)
{
if (listA.Any(aItem => bItem.Car_number == aItem.Car_number || bItem.status == aItem.status))
listC.Add(bItem);
else
listA.Add(bItem);
}
如果你真的想要lambda表达式,试试这个:
public static void ChoiseAndAdd(Cab cab,ref List<Cab> listA,ref List<Cab> listC)
{
if (listA.Any(e => e.Car_number == cab.Car_number) || listA.Any(e => e.status == cab.status))
{
listC.Add(cab);
return;
}
listA.Add(user);
}
以及表达式:
listB.ForEach(e => ChoiseAndAdd(e, ref listA, ref listC));
listB.ForEach(b =>
{
if (listA.Any(a => a.Car_number == b.Car_number || a.status == b.status))
{
listC.Add(b);
}
else
{
listA.Add(b);
}
}
);
//Populate list C
listC = listA.Where(a=> listB.Select(b=>b.Car_number).Contains(a.Car_number) && listB.Select(b => b.status).Contains(a.status)).ToList();
//Populate ListB using ListC
listB.AddRange(listA.Where(a => ! listC.Select(c => c.Car_number).Contains(a.Car_number) && ! listC.Select(c => c.status).Contains(a.status)).ToList());
注意:我在这里偶然发现了一个类似的问题,并使用您的代码澄清了我的疑问。我知道这是一个老问题,答案已经提供(并被接受(。但我想我会把上面的解决方案发布给其他可能来这里寻找答案的人。