如何将以下代码转换为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);
Run Code Online (Sandbox Code Playgroud)
你可以使用Except():
list2 = list2.Except(list1)
.ToList();
Run Code Online (Sandbox Code Playgroud)
这也将比原始代码表现更好,因为你的代码是O(n 2)在第一个集合中的所有项目上循环,然后尝试在第二个集合中找到第一个匹配.(虽然可以肯定的是,如果您的收藏品很小,性能差异并不重要,但对于大型收藏品而言,它会有很大影响).
Except()将HashSet<int>在list1内部创建一个,然后只是遍历该list2集合.只有HashSet结果枚举中没有包含的项目- 因为HashSet查找平均为O(1),这将导致总共进行O(n)工作.
有关教育的进修,请参阅Jon Skeets EduLinq系列,这里是Except的章节.