c# - 使用 LINQ 按频率和值排序

标签 c# .net linq

<分区>

我有以下数组:

var arr = new[] { 1, 1, 2, 2, 4 };

现在我想按频率对这个数组进行排序:

  • 有频率的数字子集是1[4]

  • 频率为 2 的数字子集是 [1,2]

然后我们按自然顺序对具有相同频率的元素的每个子集进行排序,得到 [1,3,4,2,2]

为此,我编写了以下 linq 查询,但我卡住了

var line in arr.GroupBy(n => n)
            // Order by the frequency of each group of numbers
            .OrderBy(g => g.Count())
            // Then by the natural order of each number
            .ThenBy(g => g.Key)
            .??

最佳答案

您可以按重复次数对数字进行分组,对组进行排序并对每个组的元素进行排序:

var result = arr.GroupBy(n => arr.Count(i => i == n))
                .OrderBy(g => g.Key)
                .SelectMany(g => g.OrderBy(x => x));

var result = arr.GroupBy(n => n)
                .OrderBy(g => g.Count())
                .ThenBy(g => g.Key)
                .SelectMany(g => g);

关于c# - 使用 LINQ 按频率和值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41835981/

相关文章:

c# - 如何在一个值中构建具有变量 1 到 4 字节的结构?

c# - 使用 jquery 打开 RDP 连接窗口 - 客户端

c# - FirstOrDefault() == null ?假 : true;

c# - 最佳实践 : action enum usage for events

c# - 在 LINQ 中求和

c# - Entity Framework 左连接

c# - 指定的转换无效。 ListView 和 Linq

c# - VarType 到 GetType()

c# 将字节转换为精度为 "higher"的 double

c# - 覆盖 XmlSerialization 的类名