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

C# 如何从Dictionary中获取含并列的前N个不同排名的所有键值对

实现方案

方案1:分组展开法(推荐)

核心思路是先按分数分组,每个分组对应一个唯一排名,取前N个排名的分组后展开所有条目,天然保留并列数据:

Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("AAA", 91);
dict.Add("BBB", 97);
dict.Add("CCC", 98);
dict.Add("DDD", 92);
dict.Add("EEE", 97);
dict.Add("FFF", 100);

int topN = 3;
var result = dict
    .GroupBy(kv => kv.Value)
    .OrderByDescending(g => g.Key)
    .Take(topN)
    .SelectMany(g => g)
    .ToDictionary(kv => kv.Key, kv => kv.Value);

// 输出验证
foreach (var kvp in result)
{
    Console.WriteLine($"{kvp.Key} = {kvp.Value}");
}

运行后输出结果:

FFF = 100
CCC = 98
BBB = 97
EEE = 97

完全符合预期。

方案2:阈值过滤法

先计算出前N个不同排名的最低分数阈值,再过滤所有分数大于等于该阈值的条目:

int topN = 3;
// 拿到第N高的分数作为阈值
int cutoffScore = dict
    .Select(kv => kv.Value)
    .Distinct()
    .OrderByDescending(v => v)
    .Take(topN)
    .Last();

var result = dict
    .Where(kv => kv.Value >= cutoffScore)
    .OrderByDescending(kv => kv.Value)
    .ToDictionary(kv => kv.Key, kv => kv.Value);

两种方案均支持任意N值,且100%保留并列排名的所有条目。


内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:09:00