You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按值集合Count对SortedDictionary排序?尝试代码未生效

按List的Count属性对SortedDictionary排序的实现方法

SortedDictionary<TKey, TValue>本身是基于键默认排序的,无法直接修改它的内部排序逻辑来按值排序,必须将其转换为可排序的集合后再处理。

你的代码问题分析

你写的代码逻辑本身是正确的,但没生效大概率是两个原因:

  1. 你依然在操作原map集合(它还是保持按键排序),没有使用排序后的myList
  2. 你需要的是降序排序(Count大的在前),但代码实现的是升序(Count小的在前)

修正后的实现方式

方式1:简化List.Sort写法

把匿名委托换成Lambda表达式更简洁,同时确保使用排序后的列表:

var map = new SortedDictionary<string, List<Account>>();
// 假设已为map填充数据

// 转换为List并排序
var sortedList = map.ToList();
// 升序排序(Count小的项在前)
sortedList.Sort((pair1, pair2) => pair1.Value.Count.CompareTo(pair2.Value.Count));
// 若需要降序,反转比较顺序即可
// sortedList.Sort((pair1, pair2) => pair2.Value.Count.CompareTo(pair1.Value.Count));

// 后续操作排序后的sortedList,原map不受影响
foreach (var item in sortedList)
{
    // 处理排序后的键值对
}

方式2:用LINQ实现(更直观)

使用LINQ的OrderBy或OrderByDescending可以直接生成排序后的序列,代码可读性更高:

var map = new SortedDictionary<string, List<Account>>();
// 填充数据

// 升序排序:按Account列表Count从小到大排列
var sortedAsc = map.OrderBy(kv => kv.Value.Count);
// 降序排序:按Account列表Count从大到小排列
var sortedDesc = map.OrderByDescending(kv => kv.Value.Count);

// 遍历使用排序后的结果
foreach (var kv in sortedDesc)
{
    Console.WriteLine($"键: {kv.Key}, 账户数量: {kv.Value.Count}");
}

核心注意事项

  • 原SortedDictionary的排序规则是固定的(按键排序),排序后的结果只能存储在新的集合/序列中,无法改变原map的排序逻辑
  • 无论用哪种方式,都必须使用排序后的结果集,原map不会发生任何变化

内容的提问来源于stack exchange,提问作者rejkid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:23:13