c# - 从字典中获取最大值的键

标签 c# linq dictionary

我有一个类型的字典

Dictionary<int, GValue> 

其中 GValue 是包含两个 double 值 P1 和 P2 的对象

我正在尝试使用以下代码从字典中获取最大值的键

var keyForMaxP1 = dict.Keys.Aggregate((i, j) => dict[i].P1 >= dict[j].P1 ? i : j);
var keyForMaxP2 = dict.Keys.Aggregate((i, j) => dict[i].P2 >= dict[j].P2 ? i : j);

它正确地为我提供了最大 P1 和 P2 的 key 。

但是如果字典包含多个具有最大 P1 或 P2 值的键怎么办?? 在这里它仍然返回一个在字典遍历过程中最先出现的Key。

编辑

假设字典有值 P1,最大值为 3.52。现在,如果字典中有两个值为 P1 = 3.52 的条目,我想获取与该值相关的两个键

最佳答案

如果你想要所有KeyValuPairs使用最大值,您可以使用 Enumerable.GroupBy :

var MaxP1KeyValues = dict.GroupBy(kv => kv.Value.P1)
    .OrderByDescending(g => g.Key).First();
var MaxP2KeyValues = dict.GroupBy(kv => kv.Value.P2)
    .OrderByDescending(g => g.Key).First();

foreach (var kv in MaxP1KeyValues)
{
    Console.WriteLine("Key:{0} Value-P1:{1}", kv.Key, kv.Value.P1);
}
foreach (var kv in MaxP2KeyValues)
{
    Console.WriteLine("Key:{0} Value-P2:{1}", kv.Key, kv.Value.P2);
}

这组所有 KeyValuePair<int, GValue>在字典中按 P1/P2 的值,OrderByDescending + First选择具有最高值的组。

关于c# - 从字典中获取最大值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354723/

相关文章:

c# - Automapper 单元测试失败

c# - 线程和 UI C# 之间的共享变量

python - 在 python 中转置(旋转)列表字典

python - 如何将 CSV 文件转换为 python 字典

python - 计算python字典中某个值出现的次数?

c# - 在 C# 中优化代码是否存在风险?

c# - 如何在C#中使用SqlDataReader读取多行和多列

c# - 包含无顺序

c# - 排列是否存在

linq - Queryable.OfType 如何工作?