怎麼能轉換爲LINQ或謂詞表達式如下代碼: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);
怎麼能轉換爲LINQ或謂詞表達式如下代碼: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);
你可以做這樣的事情:
list1.ForEach(x => { list2.Remove(x); });
您可以使用Except()
:
list2 = list2.Except(list1)
.ToList();
這也將執行比你原來的代碼更好,因爲你的代碼是O(n )對第一個集合中的所有項目進行循環,然後嘗試查找第二個集合中的第一個匹配項。 (雖然承認,如果你的收藏品很小,性能差異並不重要,但對於大型收藏品來說這將會很重要)。
Except()
將在內部創建list1
的HashSet<int>
,然後只是遍歷list2
集合。只有HashSet
中未包含的項纔會在結果枚舉中結束 - 因爲HashSet
查找的平均值爲O(1),所以總共將導致O(n)的努力。
對於教育複習,請參閱Jon Skeets EduLinq系列,這裏的chapter for Except。
+1感謝您的精彩解釋。我每天都會在SO上學到新東西。 – 2012-04-12 13:10:16
list2.RemoveAll(m=>list1.Contains(m));
IEnumerable.Except()。 – 2012-02-07 18:57:49