从另一个项目中删除一个项目数组的最快方法是什么?

leo*_*ora 15 .net c# arrays

我有两个字符串数组:

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

 string[] taken = new string[]{"a", "b"}
Run Code Online (Sandbox Code Playgroud)

我要生成一个新的字符串数组cdall - taken.

.net 3.5没有手动循环和创建新列表的任何快速方法吗?

Joe*_*orn 29

var remains = all.Except(taken);
Run Code Online (Sandbox Code Playgroud)

请注意,这并不能返回数组.但是你需要问自己是否真的需要一个数组,或者IEnumerable是否更合适(提示:它几乎总是如此).如果你真的需要一个数组,你可以打电话.ToArray()来获取它.

在这种情况下,不立即使用阵列可能会有很大的性能优势.考虑一下"all"系列中的"a"到"d",以及"take"系列中的"a"和"b".此时,"遗留"变量尚未包含任何数据.相反,它是一个知道如何告诉你在你问它时会有什么数据的对象.如果您从未真正需要该变量,那么您从未做过任何工作来计算其中的项目.


Li0*_*liQ 6

你正在使用LINQ Except,比如all.Except(taken).


Ces*_*Gon 5

string[] result = all.Except<string>(taken).ToArray<string>();
Run Code Online (Sandbox Code Playgroud)

  • 您不必声明泛型方法的类型,编译器能够推断它们. (2认同)
  • 我知道这一点。:-) 但是我认为在教别人时编写完整的语法很有用。 (2认同)