列表顺序中不同的项目按列表中的计数排列

时间:2016-08-24 16:21:01

标签: c# list

我有一个树木列表

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

我想选择不同的树,它基于Tree类的相等函数工作,以区分不同的树。现在我需要根据trees中的频率(计数)来命令这些不同的树。

它可能需要group by语句,但我更喜欢Distinct,因为它没有参数,并且基于我编写的特定Equals函数而工作。

1 个答案:

答案 0 :(得分: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();