2012-08-06 90 views
3

我在這裏與linq有一個基本問題。雖然這可以通過重複循環來解決。我想知道如何在linq中完成。基於另一個列表從列表條件中刪除某些元素

我有兩個列表。

List<string> a = new List<string>{"a","b","c","d","e","f"}; 
List<string> b = new List<string> { "a", "b", "c", "x", "y", "z" }; 

我想比較列表a和b中發現的任何一個元素。我想從b中刪除該元素。換句話說,我想根據列表a的比較從b刪除{「a」,「b」,「c」},並且只想在列表b中包含{「x」,「y」,「z」}。有沒有一個單獨的聲明LINQ來解決這個問題?

回答

7

(我敢肯定,這是另一篇文章的副本短短數天前,但我不能找到它...)

如果你需要在一個地方修改,你可以使用List<T>.RemoveAll

b.RemoveAll(x => a.Contains(x)); 

或者更有效(如果該列表是大):

HashSet<string> set = new HashSet<string>(a); 
b.RemoveAll(set.Contains); 

注意,在地方修改集合不在LINQ慣用的,這也是爲什麼上述使用.NET 2列表特定的方法。

或者如果你樂意改變b指一個新的列表,而不是,然後可以使用LINQ:

b = b.Except(a).ToList(); 
相關問題