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