gpt4 book ai didi

c# - 如何使用 O(n) 中的 LINQ 根据特定顺序查找第一项?

转载 作者:太空狗 更新时间:2023-10-29 20:32:26 24 4
gpt4 key购买 nike

假设我有一个项目列表(例如,帖子),我想根据一些重要的顺序(例如,PublishDate,然后是 CommentsCount 作为决胜局)找到第一个项目。使用 LINQ 执行此操作的自然方法如下:

posts.OrderBy(post => post.PublishDate).ThenBy(post => post.CommentsCount).First()

但是,我的微优化器担心调用 OrderBy 实际上会花费我 O(n*lgn) 来对整个列表进行排序,而我真正需要的是 O(n) 查找最小值操作。

那么,LINQ 是否足够聪明,可以从知道如何优化后续 First() 调用的 OrderBy() 返回一些东西?如果没有,开箱即用的更好方法是什么? (我总是可以编写自己的 FindMinimumItem 实现,但这似乎有点矫枉过正)。

最佳答案

排序很聪明,因为它只会对 OrderBy 的第一组执行 ThenBy,但 OrderBy 仍然在返回第一组之前必须对所有项目进行排序。

您可以使用聚合方法根据自定义比较获取第一篇文章:

Post lowest =
posts.Aggregate((Post)null,
(x, y) =>
x == null
|| y.PublishDate < x.PublishDate
|| (y.PublishDate == x.PublishDate && y.CommentsCount < x.CommentsCount)
? y : x
);

(假设您正在使用 LINQ to Objects 当然。)

关于c# - 如何使用 O(n) 中的 LINQ 根据特定顺序查找第一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2260654/

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