これは純粋に私自身の知識のためであり、私が使用するコードを書くつもりなら.Max()
.
最初の考えでは、最大値を見つけるために.Max()
1 回のパススルーを実行するだけでnumbers
済みますが、2 番目の方法では、列挙可能なもの全体を並べ替えてから、最初のものを見つける必要があります。だからそれはO(n)
対O(n lg n)
です。しかし、私はそれが最高のものだけを必要とすることを知っていて、それをつかむだけかもしれないと考えていました.
質問: LINQ および/またはコンパイラは、列挙型全体を並べ替える必要がなく、コードを本質的に .Max() と同じに煮詰める必要がないことを理解するのに十分スマートですか? 定量的に調べる方法はありますか?
IEnumerable<int> numbers = Enumerable.Range(1, 1000);
int max = numbers.Max();
int max2 = numbers.OrderByDescending(x => x).First();