【发布时间】:2019-04-17 21:39:08
【问题描述】:
我有清单
List<double> nums = new List<double> {0.2, 5.0, 12.0};
我正在尝试找到element-element^2 最大的元素。我可以跑
nums.Max(num => num - Math.Pow(num, 2))
要找到最大值,但是在评估num - Math.Pow(num, 2) 时,我如何才能获得标识为产生最大值的该元素的索引? IndexOf 不起作用,因为Max 返回的值不是应用时产生最大值的实际元素的值,而是整个表达式的值。
我查看了Obtain the Index of the Maximum Element,但在它返回实际元素并因此IndexOf 有效的情况下,这似乎涵盖了Max。我只能想象有一种简单的方法可以解决我的问题,因为Max 无论如何都会迭代列表。
【问题讨论】:
-
如果您碰巧只处理正数,则可以保证最大值
element - element^2来自 max 元素。因此,您可以返回确切的元素并使用 IndexOf 而无需执行等式。 -
我认为,您可以将引用示例中的
Value = value,替换为Value = value - Math.Pow(value, 2)。结果对您有效。 -
请注意,
num - Math.Pow(num, 2)只是一个示例。还有其他示例,计算依赖于其他变量并且无法重写。