如何快速地从一个数组中移除另一个数组的元素?

20

我有两个字符串数组:

 string[] all = new string[]{"a", "b", "c", "d"}

 string[] taken = new string[]{"a", "b"}
我想生成一个新的字符串数组,其中包含 c 和 d ,这些元素都不在taken中。
在.NET 3.5中有没有快速的方法可以做到这一点,而无需手动循环并创建新的列表?
3个回答

39
var remains = all.Except(taken);
请注意,这并不返回一个数组。但你需要问自己是否真的需要一个数组,或者使用IEnumerable更为恰当(提示:几乎总是这样)。如果你确实需要一个数组,你可以调用.ToArray()方法来获取它。
在这种情况下,不立即使用数组可能有很大的性能优势。考虑你的“all”集合中包含“a”到“d”,而“taken”集合中包含“a”和“b”。此时,“remains”变量还没有包含任何数据。相反,它是一个对象,知道如何告诉你当你查询时会有哪些数据。如果你实际上从未需要该变量,则没有计算属于它的项目所需的任何工作。

6

您正在使用LINQ的Except,例如all.Except(taken)


6
string[] result = all.Except<string>(taken).ToArray<string>();

2
你不需要为泛型方法声明类型,编译器可以自动推断。 - Maximilian Mayerl
2
我知道这个。 :-) 但我认为在教别人时写出完整的语法是很有用的。 - CesarGon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接