使用 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 按名称频率对列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

计算列表中单词的频率并按频率排序

按频率排序列表

在python中使用最后一个字符频率对二维列表进行排序

在结构中按频率对数组中的字母进行排序

首先按频率对字符串中的字符进行排序,然后按字母顺序排序

按Stream API的频率对集合进行排序