linq查询表单
本文关键字:表单 查询表 查询 linq | 更新日期: 2023-09-27 18:23:53
以下代码如何转换为linq或谓词表达式:
List<int> list1 = new List<int> {1,2,3,4,5};
List<int> list2= new List<int> {2,3,4,5,6,7};
foreach (int int1 in list1)
list2.Remove(int1);
您可以使用Except()
:
list2 = list2.Except(list1)
.ToList();
这也将比您的原始代码执行得更好,因为您的代码是O(n2)在第一个集合中的所有项上执行循环,然后尝试在第二个集合中找到第一个匹配项。(尽管无可否认,如果您的收藏这么小,性能差异不会有多大影响,但对于大型收藏来说,这将非常重要)。
Except()
将在内部创建list1
的HashSet<int>
,然后只遍历list2
集合。只有不包含在HashSet
中的项最终会出现在结果枚举中——由于HashSet
查找的平均值为O(1),这将导致总共O(n)项的工作量。
关于教育复习,请参阅Jon Skeets EduLinq系列,这里是Except的章节。
list2.RemoveAll(m=>list1.Contains(m));
您可以这样做:
list1.ForEach( x => { list2.Remove(x); } );