我有一个类型的字典
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/