2012-02-16 71 views
3

刪除項目我有兩個字符串數組從字符串數組

string[] a = ... 
string[] b = ... 

我想刪除從任何物品也存在於B或只有那些只存在於一個項目將返回一個新的數組。

因此,舉例來說,如果

a={"a", "b", "c"}; 

,並

b={"b"} 

那麼結果應該是

{"a", "c"} 

有一個整潔的lambda表達式或LINQ或東西我可以用來做到這一點?

感謝,

薩欽

回答

16

我相信Except會做你想要什麼。請記住,與大多數LINQ擴展方法一樣,Except不會修改現有集合。它會返回一個新的集合。

c = a.Except(b)

+0

也請參閱MSDN頁除外:http://msdn.microsoft.com/en-us/library/bb300779.aspx – 2012-02-16 14:40:38

+1

正確的,雖然那性能是O(N×M個),即。二次。如果'a'非常大並且'b'包含很多項目,請考慮使用HashSet:'var hashA = new HashSet (a); hashA.ExceptWith(b)中;返回a.ToArray();'這是線性的。如果'a'很小,則不需要優化。 – Andreas 2012-02-16 14:49:19

+0

爲什麼我無法將源類型'System.Collections.Generic.IEnumerable 轉換爲目標類型字符串[]'? – 2012-02-16 14:52:25