没有迭代集合,有没有办法在具有最高绝对值的集合中返回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
答案 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]);