按草稿数、评论数及国家名称排序字典并提取键
实现字典排序并提取键的完整方案
嘿,我来帮你把这个排序逻辑补全并梳理清楚~ 按照你给出的三个排序规则,我们可以用LINQ轻松实现需求,下面是完整的代码和细节说明:
完整代码示例
// 假设你的字典实例是answersDictionary var sortedCountries = answersDictionary // 规则1:按草稿(draft)答案数量降序排列(数量多的在前) .OrderByDescending(kv => kv.Value.Count(answer => answer.State == "draft")) // 规则2:草稿数量相同时,按评论(comment)答案数量降序排列 .ThenByDescending(kv => kv.Value.Count(answer => answer.State == "comment")) // 规则3:前两个条件都相同时,按国家名称升序排列(字母顺序) .ThenBy(kv => kv.Key.Name) // 仅提取排序后的字典键(Country对象) .Select(kv => kv.Key) // 转换成List集合(如果需要IEnumerable可以去掉这一步) .ToList();
细节优化说明
- 排序优先级处理:
OrderByDescending作为主排序规则,ThenByDescending和ThenBy是次级规则,只有当前面的排序条件完全相同时才会触发后续规则,完美匹配你的需求顺序。 - 空值安全防护:如果字典中存在
List<Answer>为null的情况,建议给Count判断加上空值保护,避免空引用异常:kv.Value?.Count(answer => answer.State == "draft") ?? 0 - 类型严谨性优化:如果
Answer.State当前是字符串类型,建议改成枚举类型(比如public enum AnswerState { Final, Draft, Comment }),这样能避免字符串拼写错误,此时判断条件就变成answer.State == AnswerState.Draft。
内容的提问来源于stack exchange,提问作者JCaptain
相关产品推荐
相关产品推荐

