按 C# 中每个元素的计数对整数列表进行排序

本文关键字:整数 列表 排序 元素 | 更新日期: 2023-09-27 18:32:01

我想按整数在列表中出现的次数对整数列表的元素进行排序。

因此,结果列表的第一个元素应该是原始列表中最常见的元素,第二个元素是第二个最常见的元素,依此类推。每个整数只应在结果列表中包含一次,而不是原始列表包含它的次数。次要顺序并不重要。

例如,对于1,2,3,2,1,6,2,我想得到2,1,3,62出现三次,1出现两次,36都只出现一次)。

按 C# 中每个元素的计数对整数列表进行排序

你可以做:

  • 按每个项目分组
  • 根据组计数降序排序
  • 根据组键选择唯一

喜欢:

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

使用 GroupByOrderBy

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