2012-08-06 86 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(); 
相关问题