从字典中获取最大值

本文关键字:最大值 获取 字典 | 更新日期: 2023-09-27 18:12:08

我有一个类型为

的Dictionary
Dictionary<int, GValue> 

,其中GValue是包含两个双精度值P1和P2的对象

我如何从这个字典中得到最大的P1和P2 ?

我已经试过了

c.CalculateGraphMetrics(nodeXLControl1.Graph).Max(s => s.Value.P1);

它没有给我错误,但结果显示在调试

Expression cannot contain Lambda expressions

从字典中获取最大值

我看到了很多复杂的MaxBy实现,当你可以使用Aggregate的一个重载来达到类似的效果:

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);

编辑:如果你想获得多个最大键,你需要像

这样的东西
var allMaxKeysForP1 = dict.Keys.Aggregate(
    new { Value = double.NegativeInfinity, Keys = new List<int>() },
    (a, k) =>
        {
            if (a.Value > dict[k].P1) return a;
            if (a.Value.Equals(dict[k].P1))
            {
                a.Keys.Add(k);
                return a;
            }
            return new { Value = dict[k].P1, Keys = new List<int> { k } };
        },
    a => a.Keys);

此时,您可能需要考虑将其实现为AllMaxBy方法。

即时窗口不支持lambda表达式。

你的代码是可以的,但是为了能够在即时窗口得到这个结果,你必须把它作为一个类的方法并编译它。

相关文章: