Linq查找最大值max最小值min效率比较

本文对比了使用Linq原生min/max函数与其他方法查找序列极值的效率,结果显示Linq原生方法在速度上比排序后查找快约30倍,且内存需求更小。其他方法如自定义排序的效率受值类型影响,而内存写入频繁的方法会显著降低效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对linq查找极值的几种方法做一个效率上的比较

// 首先创建了一个10_000_000大小的PointF列表
var rdn = new Random();
var points = Enumerable
    .Range(0, 10_000_000)
    .Select(t =>
        new PointF((float)rdn.NextDouble() * 200, (float)rdn.NextDouble() * 200))
    .ToList();

// 方法一:最小/最大值只排一次序
var sth = new Stopwatch();
sth.Start();
var orderPX = points.OrderBy(t => t.X).ToList();
var orderPY = points.OrderBy(t => t.Y).ToList();
var minX = orderPX.First().X;
var maxX = orderPX.Last().X;
var minY = orderPY.First().Y;
var maxY = orderPY.Last().Y;
Console.WriteLine($"{nameof(minX)}:{minX}, {nameof(maxX)}:{maxX}, {nameof(minY)}:{minY}, {nameof(maxY)}:{maxY}");
Console.WriteLine($"OrderBy:{sth.Elapsed}");

// 方法二:先获取值,在排序
sth.Restart();
var orderX = points.Select(t => t.X).OrderBy(t => t).ToList();
v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值