我在这里遇到了一个基本的问题。虽然这可以通过重复循环来解决。我想知道如何在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来解决这个问题?
答案 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();