gpt4 book ai didi

c# - .Max() 与 OrderByDescending().First()

转载 作者:可可西里 更新时间:2023-11-01 08:55:53 27 4
gpt4 key购买 nike

这纯粹是为了我自己的知识,如果我要编写代码,我将只使用 .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();

最佳答案

LINQ 和/或编译器是否足够聪明,可以弄清楚它不需要对整个可枚举对象进行排序并将代码归结为与 .Max() 基本相同?

没有。

是否有可量化的方法来找出答案?

秒表的简单基准测试:

    var numbers = Enumerable.Range(1, 10000000);
var sw = Stopwatch.StartNew();
int max = numbers.Max();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
int max2 = numbers.OrderByDescending(x => x).First();
Console.WriteLine(sw.ElapsedMilliseconds);

最大():70 毫秒

订购方式():2066 毫秒

此外,如果您将计数增加太多,OrderBy() 会失败并抛出 OutOfMemoryException,而 Max() 则不会。

关于c# - .Max() 与 OrderByDescending().First(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10290986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com