从Dictionary中获取最大价值

时间:2013-05-03 07:26:21

标签: c# linq dictionary

我有一个类型字典

Dictionary<int, GValue> 

其中GValue是一个包含两个双精度值P1和P2

的对象

如何从此词典中获取最大P1和P2?

到目前为止我已经尝试了这个

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

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

Expression cannot contain Lambda expressions

2 个答案:

答案 0 :(得分:1)

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

您的代码没问题,但是为了能够在即时窗口中获得此结果,您必须将其作为类中的方法并进行编译。

答案 1 :(得分:1)

重新。获取与最大值对应的键:当您可以使用overloads of Aggregate之一来实现类似效果时,我会看到许多复杂的MaxBy实现:

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方法实现。