我想我太习惯使用 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 项目:如果根据您的标准更可取:将其插入变量。当你到达终点时,你就有了胜利者。
我是一名优秀的程序员,十分优秀!