迭代集合的缺點是否有一種方法可以返回具有最高絕對值的集合中的double而不將值設置爲該集合其實絕對?從列表中返回具有最高絕對值的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
迭代集合的缺點是否有一種方法可以返回具有最高絕對值的集合中的double而不將值設置爲該集合其實絕對?從列表中返回具有最高絕對值的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
一種方法來考慮:
var max = vals
.OrderByDescending(z => Math.Abs(z))
.FirstOrDefault();
或者,考慮使用MoreLinq的MaxBy。它比我和Samvel的解決方案都要快,特別是對於更大的輸入集。
var max = vals.MaxBy(z => Math.Abs(z));
以下是這樣做的方法有兩種:
先用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]);
「迭代集合」。 Enumerable.Max迭代一個集合。老的好'for'循環將是最高性能的解決方案 – ASh
@ASh AFAIK原生.net迭代在'for'循環中有一個性能提升,這裏有一個性能問題,我沒有提及並且想知道是否存在在我編寫自己的'IEnumerable'擴展的路線之前的某種本地實現。 – Wobbles
什麼是'native .net iteration' @Wobbles? – mjwills