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

C# 按每个元素的计数排序列表,c#,linq,C#,Linq,我有一个列表(例如List:1,2,3,2,1,6,2)。其中有些元素相同,有些则不同(即存在不同的元素) 我需要按照每个元素在列表中出现的次数对列表进行排序。可能吗?使用GroupBy和OrderBy: var list = new[] { 1, 2, 3, 2, 1, 6, 2 }; list.GroupBy(x => x).OrderBy(x => x.Count()).Select(x => x.Key); 你可以做: 按每个项目分组

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


我需要按照每个元素在列表中出现的次数对列表进行排序。可能吗?

使用
GroupBy
OrderBy

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

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

SelectMany
将使列表变平,并提供如下输出:

2
2
2
1
1
3
6

是的,有可能。您尝试过什么?另外,您希望输出是什么样子的?在重复频率的情况下,您的次要顺序应该是什么?数值asc/desc?输出2,1,3,6。第二顺序并不重要。我的理解是OP希望在不消除重复的情况下进行排序。换句话说,从查询返回的项目数必须等于进入的项目数,但要使用OP想要的特定顺序。@dasblinkenlight,感谢您的澄清,我在回答中也添加了相应的代码。
var query = list.GroupBy(item => item)
                .OrderByDescending(grp => grp.Count())
                .SelectMany(grp => grp);
2
2
2
1
1
3
6