从列表条件中删除某些元素基于另一个列表

时间:2012-08-06 06:10:29

标签: linq list

我在这里遇到了一个基本的问题。虽然这可以通过重复循环来解决。我想知道如何在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进行比较,并在a中找到b中的哪个元素。我想从b中删除该元素。换句话说,我想根据列表a的比较从b中删除{“a”,“b”,“c”},并且只想在列表b中包含{“x”,“y”,“z”}。是否有单一声明linq来解决这个问题?

1 个答案:

答案 0 :(得分: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();
相关问题