从列表中返回具有最高绝对值的double值,而不使返回值为绝对值

时间:2017-07-08 13:00:49

标签: c# math

没有迭代集合,有没有办法在具有最高绝对值的集合中返回double而不使集合中的值实际上是绝对的?

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

vals.Max(v => Math.Abs(v)); // This returns 3.8 instead of -3.8

2 个答案:

答案 0 :(得分:4)

需要考虑的一种方法:

var max = vals
    .OrderByDescending(z => Math.Abs(z))
    .FirstOrDefault();

或者,请考虑使用MoreLinq' MaxBy。它比我和Samvel的解决方案都要快,特别是对于更大的输入集。

var max = vals.MaxBy(z => Math.Abs(z));

答案 1 :(得分:1)

以下是两种方法:

首先使用LINQ

double[] vals = new double[] { 2.3, 1.7, -3.8};
var max = vals.Max(x => Math.Abs(x)); 
Console.WriteLine(vals.Where(z => Math.Abs(z) == max).First());

第二次使用For循环:

int index =0;
for(int i=0;i<vals.Length;i++)
{
    if(Math.Abs(vals[i])>=Math.Abs(vals[index]))
        index=i;
}
Console.WriteLine(vals[index]);