从列表中返回绝对值最高的双精度值,不将返回值设为绝对值

Wob*_*les 1 c# math

除了迭代集合,有没有办法返回具有最高绝对值的集合中的双精度值,而不会使集合中的值实际上是绝对值?

double[] vals = new double[] { 2.3, 1.7, -3.8};

vals.Max(v => Math.Abs(v)); // This returns 3.8 instead of -3.8
Run Code Online (Sandbox Code Playgroud)

mjw*_*lls 5

要考虑的一种方法:

var max = vals
    .OrderByDescending(z => Math.Abs(z))
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

或者,考虑使用 MoreLinq 的MaxBy。它比 my 和 Samvel 的解决方案都快,尤其是对于较大的输入集。

var max = vals.MaxBy(z => Math.Abs(z));
Run Code Online (Sandbox Code Playgroud)