获取List.Max的索引?

3 c# list max

我有清单

List<double> nums = new List<double> {0.2, 5.0, 12.0};
Run Code Online (Sandbox Code Playgroud)

我试图找到element-element^2最大的元素。我可以跑

nums.Max(num => num - Math.Pow(num, 2))
Run Code Online (Sandbox Code Playgroud)

找到最大值,但如何才能获得该元素的索引,该索引在评估时标识为产生最大值num - Math.Pow(num, 2)IndexOf不起作用,因为返回的值Max不是应用时产生最大值的实际元素的值,而是整个表达式的值。

我已经查看了获取最大元素的索引,但这似乎涵盖了Max它返回实际元素并因此起作用的情况IndexOf。我只能想象有一种简单的方法可以解决我的情况,因为Max无论如何都会迭代列表。

Oli*_*bes 5

有时用一个好的旧循环更容易做到

double maxValue = Double.MinValue;
int indexOfMax = -1;
for (int i = 0; i < nums.Count; i++) {
    double x = nums[i];
    double y = x - x * x;
    if (y > maxValue) {
        maxValue = y;
        indexOfMax = i;
    }
}
double element = nums[indexOfMax];
Run Code Online (Sandbox Code Playgroud)

  • 与使用可用的 LINQ 解决方案相比,编写的内容并不多,更容易理解,而且可能更快。但这是一个品味问题。您的“Max”解决方案更短,但不起作用。 (3认同)