2013-02-23 72 views
1

我有一個數組,其中包含屬性Number。我需要將它們組由值即對象包含那些樣本值:Linq組對象的唯一值並創建兩個列表

1 2 3 3 3 4 5 6 6 6 7 7 

我必須將它們組這樣的:

listOfUniqe = {1,2,4,5} 
listOfDuplicates1 = {3,3,3} 
listOfDuplicates2 = {6,6,6} 
listOfDuplicates3 = {7,7} 
... 

我試圖使用不同的,具有First()。但是這使我首先發現並刪除重複。如果它有重複項並將它們移動到另一個列表中,我想先消除對象的首次出現。

List<Reports> distinct = new List<Reports>; 
distinct = ArrayOfObjects.GroupBy(p => p.Number).Select(g => g.First()).ToList(); 

任何想法,我可以做到這一點?

回答

4

要獲得小組只用一個元素使用:

distinct = ArrayOfObjects.GroupBy(p => p.Number) 
         .Where(g => g.Count() == 1) 
         .ToList(); 

並獲得組列表與多個元素使用:

nonDistinct = ArrayOfObjects.GroupBy(p => p.Number) 
          .Where(g => g.Count() > 1) 
          .Select(g => g.ToList()) 
          .ToList(); 
4

第一組項目:

var groups = values.GroupBy(p => p.Number).ToList(); 

獨特的是組數爲1的:

var unique = groups.Where(g => g.Count() == 1).Select(g => g.Single()).ToList(); 

與重複的因素稱爲其他的:

var nonUnique = groups.Where(g => g.Count() > 1).ToList(); 
相關問題