Это чисто для моих собственных знаний, если бы я собирался написать код, я бы просто использовал .Max()
..Max() vs OrderByDescending(). First()
Сперва подумал, что .Max()
должен выполнить только один проход через numbers
, чтобы найти максимальное значение, в то время как второй способ должен отсортировать всю перечислимую вещь, а затем найти первую. Так что это O(n)
vs O(n lg n)
. Но потом я подумал, может быть, он знает, что ему нужно только самое высокое и просто хватает его.
Вопрос: Является LINQ и/или компилятор достаточно умен, чтобы понять, что это не нужно сортировать всю перечислимы и кипятит код вниз, по существу, такой же, как .MAX()? Есть ли способ поддаваться количественному определению?
IEnumerable<int> numbers = Enumerable.Range(1, 1000);
int max = numbers.Max();
int max2 = numbers.OrderByDescending(x => x).First();
Хороший вопрос! +1 –