Это чисто для моих собственных знаний, если бы я собирался писать код, я бы просто используйте .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();