我有类ABC这样的
public class ABC{
public int Id {get;set;}
public int UserCount {get;set;}
}
现在我将以下记录添加到ABC
类型的列表中List<ABC> lstABC = new List<ABC>();
lstABC.Add(new ABC(){Id=1,UserCount=5});
lstABC.Add(new ABC(){Id=2,UserCount=15});
lstABC.Add(new ABC(){Id=3,UserCount=3});
lstABC.Add(new ABC(){Id=4,UserCount=20});
lstABC.Add(new ABC(){Id=5,UserCount=33});
lstABC.Add(new ABC(){Id=6,UserCount=21});
我还有另一个int
类型的列表List<int> lstIds = new List<int>();
lstIds.Add(1);
lstIds.Add(3);
lstIds.Add(4);
现在,我要删除lstABC
中lstIds
的{{1}}中未匹配的所有项目,而不使用任何循环。最优化的方法是什么?
答案 0 :(得分:2)
你可以像这样使用RemoveAll:
lstABC.RemoveAll(x => !lstIds.Contains(x.Id));
它应该可以轻松工作
答案 1 :(得分:0)
继续使用@ Coder1409解决方案,使用HashSet提升性能(适用于大型集合):
HashSet<int> hashSet = new HashSet<int>(lstIds);
lstABC.RemoveAll(x => !hashSet.Contains(x.Id));
HTH
答案 2 :(得分:0)
另一种解决方案有点简单
lstABC = (from l in lstABC
where lstIds.Contains(l.Id)
select l).ToList();
除了删除你,你也可以只选择匹配的元素