2016-08-24 22 views
1

我的樹木列表順序截然不同的項目由他們的計算列表

List<Tree> trees; 
    ... 
    filter_trees = trees.Distinct().ToList(); 

我要選擇不同的樹列表,它的工作原理基於Tree類的平等功能來區分不同的樹。現在我需要根據它們在trees中的頻率(計數)來排序這些不同的樹。

它可能需要一個group by聲明,但我更喜歡Distinct,因爲它沒有參數,並基於我編寫的特定Equals函數工作。

+0

是否有可能看到你的平等功能?我相信你可以調整它來包含頻率。 –

+0

也覆蓋* CompareTo()*。 –

+0

[MoreLINQ](http://morelinq.googlecode.com/)可能有你想要的東西http://stackoverflow.com/questions/489258/linqs-distinct-on-a-particular-property – Slai

回答

4

您仍然可以在一個LINQ鏈中完成所有操作。 GroupBy會尊重您的平等比較,然後您可以選擇一個包含樹和計數的複雜項目,然後按計數進行排序,然後拔出樹。

var orderedTrees = trees 
    .GroupBy(t => t) 
    .Select(g => new 
     { 
      Tree = g.Key, 
      Count = g.Count() 
     }) 
    .OrderBy(x => x.Count) 
    .Select(x => x.Tree) 
    .ToList();