linq查询表
如何将以下代码转换为linq或谓词表达式:
List list1 = new List {1,2,3,4,5}; List list2= new List {2,3,4,5,6,7}; foreach (int int1 in list1) list2.Remove(int1);
你可以这样做:
list1.ForEach( x => { list2.Remove(x); } );
您可以使用Except()
:
list2 = list2.Except(list1) .ToList();
这也将比原始代码表现更好,因为你的代码是O(n 2 )在第一个集合中的所有项目上循环,然后尝试在第二个集合中找到第一个匹配。 (虽然可以肯定的是,如果您的系列很小,性能差异并不重要,但对于大型系列来说,它会有很大的影响)。
Except()
将在内部创建list1
的HashSet
,然后只遍历list2
集合。 只有未包含在HashSet
中的项才会在结果枚举中结束 – 因为HashSet
查找平均为O(1),这将导致总共进行O(n)工作。
有关教育的进修,请参阅Jon Skeets EduLinq系列,这里是Except的章节 。
list2.RemoveAll(m=>list1.Contains(m));