gpt4 book ai didi

c# - 如何按不属于对象的变量对对象列表进行排序?

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:27 25 4
gpt4 key购买 nike

考虑以下伪代码:

List<Person> People = new List<Person>();
int score;

...

foreach (Person p in People){

score = scoreFunc(p);

???

}

问题 - 如何按分数对 Person 对象列表进行排序?如果您想知道,我不想让分数成为 Person 的属性,因为在不同情况下,同一 Person 的得分会有所不同,并且在逻辑上不是 Person 的属性。

最佳答案

使用可以比较两个人的委托(delegate)/类进行排序 - 没有强制要求您需要使用单个属性来比较他们。例如

People.Sort((p1,p2)=>scoreFunc(p1)-scoreFunc(p2));

编辑:

如果您希望按分数对整个列表进行排序,那么这将是唯一的方法(您可以更改排序算法但比较不会改变,因为分数是排序键)。现在上面可能会多次计算某些人的分数 - 因此优化之一可能是缓存人的分数。例如,scoreFunc 可以检查缓存(字典)以查看是否已经计算了分数。

可以根据您的实际需求和评分函数实现情况进行进一步优化。例如,假设您有 10000 个人,并且您可能对前 20 名感兴趣。假设该人的年龄和教育资格贡献了大部分分数,而其他 20 个属性贡献较小。因此,您可以进行多轮排序 - 第一轮可能使用仅基于两个因素的分数来确定前 500 人,然后您应用详细评分来获得实际的前 20 名。

关于c# - 如何按不属于对象的变量对对象列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731862/

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