C# 按字母顺序排序字符串,后跟出现频率

标签 c# linq

我刚开始学习 lambda/linq。这是我到目前为止所拥有的。

var frequency = from f in "trreill".ToList()
                group f by f into letterfrequency
                select letterfrequency;

foreach (var f in frequency)
{
    Console.WriteLine($"{f.Key}{f.Count()}");
}

这是输出:

t1 r2 e1 i1 l2

需要的输出:

e1i1l2r2t1

不知道如何正确排序。对我做错了什么有什么想法吗?

最佳答案

您缺少的是将 orderby 添加到您的 LINQ 语句:

var frequency = from f in "trreill"
                group f by f into letterfrequency
                orderby letterfrequency.Key
                select new
                {
                    Letter = letterfrequency.Key,
                    Frequency = letterfrequency.Count()
                };

foreach (var f in frequency)
{
    Console.WriteLine($"{f.Letter}{f.Frequency}");
}

letterfrequency 有一个名为 Key 的属性,其中包含每个组的字母,因此添加 orderby letterfrequency.Key 对结果进行排序以给出你是你想要的输出:

e1

i1

l2

r2

t1

我还稍微调整了查询​​结果(只是为了表明它是可能的)以生成一个新的匿名类型,其中包含 Letter 和 Frequency 作为命名属性。这使得 Console.WriteLine 中的代码更清晰一点,因为所使用的属性称为 LetterFrequency 而不是 KeyCount() 方法。

使用 C# 7.0 元组将其增加到 11

如果您使用的是 C# 7.0,则可以将匿名类型的使用替换为元组,这意味着代码现在如下所示:

var frequency = from f in "trreill"
                group f by f into letterfrequency
                orderby letterfrequency.Key
                select
                (
                    Letter: letterfrequency.Key,
                    Frequency: letterfrequency.Count()
                );


foreach (var (Letter, Frequency) in frequency)
{
    Console.WriteLine($"{Letter}{Frequency}");
}

我已经 blogged about this , 还有很多 other resourcesdescribe them ,包括这个询问'Are C# anonymous types redundant in C# 7的Stackoverflow问题',如果您想更深入地了解元组,它们是什么,它们如何工作以及为什么/何时您可能希望优先使用它们而不是匿名类型。

关于C# 按字母顺序排序字符串,后跟出现频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395709/

相关文章:

c# - 当项目相等时从可枚举源中删除单个项目

c# - 用 linq 替换 foreach 循环

java - C# SortedDictionary 中 Java 的 SortedMap.tailMap 的等价物

c# - Web 服务性能/吞吐量的异步方法

c# - 单独使用光线转换的激光束

c# - 在与 WPF 样式上的 setter 属性不同的类型上使用触发器属性

c# - 使用 LINQ 将字符串拆分为元组?

c# - 如何映射 ImmutableArray 而不将其强制转换为非线程安全的 IEnumerable?

c# - 在 C# 中,按字符串属性对对象列表进行排序并获得正确顺序的最佳方法是什么?

c# - GroupByUntilChanged : is there a LINQ GroupBy operator that groups by SUCCESSIVE equal keys?