我在这里遇到了一个基本的问题.虽然这可以通过重复循环来解决.我想知道如何在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" };
Run Code Online (Sandbox Code Playgroud)
我想比较列表a和b中找到的b中的哪个元素.我想从b中删除该元素.换句话说,我想根据列表a的比较从b中删除{"a","b","c"},并且只想在列表b中包含{"x","y","z"}.是否有单一声明linq来解决这个问题?
(我确定这是几天前另一篇文章的重复,但我找不到它......)
如果您需要进行修改,可以使用List<T>.RemoveAll:
b.RemoveAll(x => a.Contains(x));
Run Code Online (Sandbox Code Playgroud)
或者更有效(如果列表很大):
HashSet<string> set = new HashSet<string>(a);
b.RemoveAll(set.Contains);
Run Code Online (Sandbox Code Playgroud)
请注意,在LINQ中修改集合并不是惯用的,这就是上面使用.NET 2特定于列表的方法的原因.
或者,如果您很乐意改为b引用新列表,那么您可以使用LINQ:
b = b.Except(a).ToList();
Run Code Online (Sandbox Code Playgroud)