使用 Linq 按名称频率对列表进行排序
Posted
技术标签:
【中文标题】使用 Linq 按名称频率对列表进行排序【英文标题】:Sort an list by frequency of names by using Linq 【发布时间】:2021-05-26 12:01:32 【问题描述】:原名单为:
Cat
Dog
Mouse
Cat
Bat
Alpaca
Bat
预期结果:
Bat
Bat
Cat
Cat
Alpaca
Dog
Mouse
结果首先显示名称的频率,然后按字母顺序排序。 谁能帮我用 C# 和 LINQ 解决这个问题?
【问题讨论】:
为什么“羊驼”跟在“猫”后面?这是笔误吗? 我想先按频率对名称进行排序 您是否查看过orderby
的任何一种形式。您还需要指定排序规则;我想不出一个能把 Alpaca 放在你展示它的地方
使用OrderByDescending
如果有人知道一些 LINQ 魔法,它在列表中执行 order by 频率和按 alpha 排序,我会感到惊讶。您需要在问题中指定类似的基本内容。您可以对其进行编辑以添加该信息。您应该通过tour 阅读有关如何提出好问题的信息
【参考方案1】:
您可以使用 group by 来执行此操作:
var input = new List<string> "Cat", "Dog", "Mouse", "Cat", "Bat", "Alpaca", "Bat" ;
var result = input.GroupBy(x => x).OrderByDescending(x => x.Count()).ThenBy(x => x.Key).SelectMany(x => x).ToList();
在线演示:https://dotnetfiddle.net/10wAPu
【讨论】:
如何让出现频率更高的名字排在最前面?以上是关于使用 Linq 按名称频率对列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章