.Max ()vs OrderByDescending ().First()

Это чисто для моих собственных знаний, если бы я собирался писать код, я бы просто используйте .Max().

На первый взгляд .Max()нужно сделать только один проход через numbers, чтобы найти максимум, в то время как второй способ должен отсортировать все перечисляемое, а затем найти первый. Итак, это 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();
10
задан jb. 24 April 2012 в 02:26
поделиться