gpt4 book ai didi

c# - 在 C# 中获取字典最高值键的好方法

转载 作者:IT王子 更新时间:2023-10-29 03:42:42 27 4
gpt4 key购买 nike

我正在尝试获取 Dictionary<string, double> results 中最大值的键.

这是我目前所拥有的:

double max = results.Max(kvp => kvp.Value);
return results.Where(kvp => kvp.Value == max).Select(kvp => kvp.Key).First();

然而,由于这似乎有点低效,我想知道是否有更好的方法来做到这一点。

最佳答案

编辑:.NET 6 引入了一种新方法
var max = results.MaxBy(kvp => kvp.Value).Key;

如果可以的话,你应该使用它。


我认为这是使用标准 LINQ 的可读性最高的 O(n) 答案。

var max = results.Aggregate((l, r) => l.Value > r.Value ? l : r).Key;

编辑:CoffeeAddict 的解释

Aggregate 是众所周知的函数概念的 LINQ 名称 Fold

它遍历集合中的每个元素并应用您提供的任何函数。在这里,我提供的函数是一个返回较大值的比较函数。循环时,Aggregate 会记住上次调用我的函数时的返回结果。它将此作为变量 l 提供给我的比较函数。变量 r 是当前选中的元素。

因此,在聚合遍历整个集合后,它会返回上次调用我的比较函数时的结果。然后我从中读取了 .Key 成员,因为我知道它是一个字典条目

这是另一种看待它的方式[我不保证这会编译 ;)]

var l = results[0];
for(int i=1; i<results.Count(); ++i)
{
var r = results[i];
if(r.Value > l.Value)
l = r;
}
var max = l.Key;

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com