如何基于字符在字符串中的出现频率对字符列表进行降序排序
字符频次降序输出解决方法
核心问题
两个独立的平行列表单独排序会破坏字符与对应频次的索引绑定关系,导致排序后字符和频次不匹配。
最小改动适配方案
无需调整你已写好的字符频次统计逻辑,仅修改输出前的排序逻辑即可:
// 按索引配对字符与对应频次,再按频次降序排序 var sortedPairs = chars.Zip(counts, (character, count) => new { Character = character, Count = count }) .OrderByDescending(pair => pair.Count); // 遍历输出结果 foreach (var pair in sortedPairs) { Console.WriteLine($"{pair.Character} = {pair.Count}"); }
原理:
Zip方法会按索引位置配对两个等长列表的元素,确保字符和频次的对应关系不会被排序操作破坏。
优化实现方案(可选)
可以直接通过LINQ的分组能力完成统计+排序全流程,无需维护两个平行列表,逻辑更简洁:
var sortedResult = input.GroupBy(c => c) .Select(g => new { Character = g.Key, Count = g.Count() }) .OrderByDescending(x => x.Count); foreach (var item in sortedResult) { Console.WriteLine($"{item.Character} = {item.Count}"); }
内容的提问来源于stack exchange,提问作者PandSkin
相关产品推荐
相关产品推荐

