我有一个类型的字典
Dictionary<int, GValue>
其中 GValue 是一个包含两个双精度值 P1 和 P2 的对象
如何从此字典中获取最大 P1 和 P2?
到目前为止我已经尝试过了
c.CalculateGraphMetrics(nodeXLControl1.Graph).Max(s => s.Value.P1);
它没有给我任何错误,但结果显示在调试中
Expression cannot contain Lambda expressions
我有一个类型的字典
Dictionary<int, GValue>
其中 GValue 是一个包含两个双精度值 P1 和 P2 的对象
如何从此字典中获取最大 P1 和 P2?
到目前为止我已经尝试过了
c.CalculateGraphMetrics(nodeXLControl1.Graph).Max(s => s.Value.P1);
它没有给我任何错误,但结果显示在调试中
Expression cannot contain Lambda expressions
立即窗口不支持 lambda 表达式。
您的代码没问题,但为了能够在即时窗口中获得此结果,您必须将其作为类中的方法并编译它。
回覆。获取对应于最大值的键:我看到了很多复杂的实现,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
方法来实现。