2010-04-06 17 views
7

Nesnelerin bir listesi var, herhangi bir türde olabilir T.LINQ: Listede Sadece Görünen Öğeleri Seç

Bu listede görünen nesnelerin listesi yalnızca bir kez linq kullanılarak nasıl seçilir? Örneğin, listem {2,3,4,5,8,2,3,5,4,2,3,4,6} ise, çıktı {6,8} olmalıdır.

+3

+1 zor soru için :) – leppie

cevap

7

Bu deneyebilirsiniz:

int[] arr = { 2, 3, 4, 5, 8, 2, 3, 5, 4, 2, 3, 4, 6 }; 
var q = 
    from g in arr.GroupBy(x => x) 
    where g.Count() == 1 
    select g.First(); 
+0

Ancak, jenerik 'T' için eşitliği sınamak için bir yönteme sahip olmanız gerekir. Yine de çok iyi cevap. –

+0

@NickLarsen bir şekilde bir örnek verebilir misiniz? İlginç. – nawfal

+0

@nawfal bu yıllar önceydi, o sırada ne yaptığımı hatırlamıyorum; afedersiniz. –

3

Count() işlevini kullanın.

int[] a = {2,3,4,5,8,2,3,5,4,2,3,4,6}; 

    var selection = from i in a 
     where (a.Count(n => n == i) == 1) 
     select i; 
0

Onları saymak gerek yoktur, sadece onlar benzersiz olduğundan emin olmak gerekir.

int[] arr = { 2, 3, 4, 5, 8, 2, 3, 5, 4, 2, 3, 4, 6 }; 
var unique = arr.Where((n, index) => !arr.Take(index).Contains(n) && !arr.Skip(index+1).Contains(n));