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 中的任何元素进行比较 a 。我想从 b 中删除该元素。换句话说,我想根据列表 a 的比较从 b 中删除 {"a","b","c"} ,并且希望在列表 b 中只包含 {"x","y","z"} 。是否有一条语句 linq 可以解决这个问题?

4

1 回答 1

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();
于 2012-08-06T06:15:03.150 回答