从字符串数组中删除项。

3
我有两个字符串数组。
string[] a = ...
string[] b = ...

我想从数组 a 中移除任何也存在于数组 b 中的项目,或者返回仅包含那些只存在于数组 a 中的项目的新数组。
因此,举个例子,如果:
a={"a", "b", "c"};

“而且,”
b={"b"}

那么结果应该是什么。
{"a", "c"}

有没有一个简洁的lambda表达式或Linq或其他可以用来做这个的东西?
谢谢,
Sachin
1个回答

16

我相信 Except 方法可以达到你的目的。请记住,Except 和大多数 LINQ 扩展方法一样,不会修改现有集合,而是会返回一个新的集合。

c = a.Except(b)


请参阅 Except 的 msdn 页面:http://msdn.microsoft.com/zh-cn/library/bb300779.aspx - Sinh Pham
1
虽然这样做的性能是O(NxM),即二次方级别,但是是正确的。如果a非常大且b包含许多项,请考虑使用HashSet:var hashA = new HashSet<string>(a); hashA.ExceptWith(b); return a.ToArray(); 这样做的性能是线性的。如果a很小,则无需优化。 - Andreas
为什么我会得到“无法将源类型'System.Collections.Generic.IEnumerable<string>'转换为目标类型'string[]'”的错误? - Sachin Kainth
2
Except 返回一个 IEnumerable<T>。如果你想要一个数组,你需要在这个结果上调用 ToArray() 方法。 - cadrell0

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