2014-10-09 78 views
3

我知道在刪除重複項之後,有多個有關返回數組中唯一值的答案,但在刪除重複項之後並不是每個元素都是唯一的?我只想返回除去任何重複項之前唯一的值。如果元素在原始數組中重複,我不希望它在我的最終數組中。返回唯一值,但不刪除重複項 - C#

所以此陣...

[0, 1, 1, 2, 3, 3, 3, 4] 

應僅返回:

[0, 2, 4] 

另一種表達,這將是刪除所有重複,以及那是有史以來複制所有唯一值。

我來自JavaScript背景,用C#語法仍然有點不穩定。 :)

回答

6

最簡單的方法是使用LINQ,由值相同的值進行分組,每組中的計算元素的數量,然後返回團體鍵:

var singleOccurrences = array.GroupBy(x => x) 
          .Where(g => g.Count() == 1) 
          .Select(g => g.Key) 
          .ToArray(); 

如果你真的需要這對於大量輸入來說是有效的,你可以編寫自己的方法來跟蹤「具有單個值的元素」和「具有多個值的元素」。我想這個雖然:)

+0

哇,我們同時發佈相同的答案,差不多.. :) – 2014-10-09 20:54:19

+0

謝謝你!輸入將被限制在50個左右的值 - 可能仍然很小,不會遇到任何效率問題。 – ssamakar 2014-10-09 21:12:08

6

開始可以使用GroupBy方法

var uniqueNumbers = numbers.GroupBy(x => x) 
        .Where(x => x.Count() == 1) 
        .Select(g => g.Key) 
        .ToArray(); 

這將基本上組中的所有數字,然後採取中有一個號碼的組。

+0

只需用頭髮就可以回覆更快:)謝謝! – ssamakar 2014-10-09 21:09:16