gpt4 book ai didi

c# - 试图弄清楚如何在没有 LINQ 的情况下进行快速复杂排序

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:50 24 4
gpt4 key购买 nike

我想我太习惯使用 LINQ 但这很慢,我确实使用了分析器,它占用了 65% 的时间来完成我正在尝试做的事情

var unlock = Locked.OrderBy(x => x.Weight) //double
.ThenByDescending(x => x.Stuff?.Level ?? 100) //int
.ThenBy(x => x.Penalty) //double
.FirstOrDefault();

Locked 是一个列表,我知道排序会改变列表但我真的不在乎,我只是想让它工作(如果可能的话),下面的代码不会给出与上面的 LINQ 相同的结果;

Locked.Sort(delegate (Node a, Node b)
{
int xdiff = a.Weight.CompareTo(b.Weight);

if (xdiff != 0) return xdiff;

var aStuff = a.Stuff?.Level ?? 100;
var bStuff = b.Stuff?.Level ?? 100;

xdiff = -1 * aStuff.CompareTo(bStuff);

if (xdiff != 0) return xdiff;

return xdiff = a.Penalty.CompareTo(b.Penalty);
});

var unlock = Locked[0];

首先,List.Sort 是否可以进行复杂 排序? asc/然后 desc/然后 asc ?

如果是,我的错误在哪里?

接下来是,有没有更快的方法来完成我想做的事情?

最佳答案

如果您刚好在“第一个或默认”(最小值/最大值)之后,则不需要排序 - 您可以在一次 O(N) 遍中完成此操作。选择第一项并将其存储在变量中;现在依次遍历所有 other 项目:如果根据您的标准更可取:将其插入变量。当你到达终点时,你就有了胜利者。

关于c# - 试图弄清楚如何在没有 LINQ 的情况下进行快速复杂排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181665/

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