将一堆值添加到 aSortedList
只是为了对数据进行排序是相当低效的。您实际上是在进行“插入排序”,即 O(n^2)。最广泛使用的排序算法是 O(n*log(n))。
最重要的是,如果您只需要最大值,您可以只循环一次数据并在 O(1) 时间内计算最大值。
要找到最大值,只需使用 LINQ 的Max
函数:
IEnumerable<X> data = ...;
float max = data.Max(item => doSomeComputation(item));
要获取生成最大值的项目,您可以使用 MaxBy。(不幸的是 .NET 不直接发布它,您需要自己编写/添加它。)
X maxItem = data.MaxBy(item => doSomeComputation(item));
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source
, Func<TSource, TKey> selector
, IComparer<TKey> comparer = null)
{
if (comparer == null)
{
comparer = Comparer<TKey>.Default;
}
using (IEnumerator<TSource> iterator = source.GetEnumerator())
{
if (!iterator.MoveNext())
{
throw new ArgumentException("Source was empty");
}
TSource maxItem = iterator.Current;
TKey maxValue = selector(maxItem);
while (iterator.MoveNext())
{
TKey nextValue = selector(iterator.Current);
if (comparer.Compare(nextValue, maxValue) > 0)
{
maxValue = nextValue;
maxItem = iterator.Current;
}
}
return maxItem;
}
}