按每个元素的计数排序列表

时间:2014-11-25 21:03:08

标签: c# linq

我有一个列表(例如List<int>:1,2,3,2,1,6,2)。其中一些元素是相同的,有些不是(即有不同的元素)。

我需要按列表中每个元素出现的次数来排序列表。有可能吗?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

  • 按项目分组
  • 按小组计数降序排序
  • 根据群组密钥选择唯一项目

像:

List<int> list = new List<int> { 1, 2, 3, 2, 1, 6, 2 };
var query = list.GroupBy(item => item)
                .OrderByDescending(grp => grp.Count())
                .Select(grp => grp.Key);


foreach (var item in query)
{
    Console.WriteLine(item);
}

编辑:

如果您不想要独特的商品,但根据其出现的所有商品,请使用:

var query = list.GroupBy(item => item)
                .OrderByDescending(grp => grp.Count())
                .SelectMany(grp => grp);

SelectMany会压缩列表,并为您提供如下输出:

2
2
2
1
1
3
6

答案 1 :(得分:1)

使用GroupByOrderBy

        var list = new[] { 1, 2, 3, 2, 1, 6, 2 };
        list.GroupBy(x => x).OrderBy(x => x.Count()).Select(x => x.Key);