Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按不属于对象的变量对对象列表进行排序?_C#_List_Sorting - Fatal编程技术网

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

C# 如何按不属于对象的变量对对象列表进行排序?,c#,list,sorting,C#,List,Sorting,考虑以下伪代码: List<Person> People = new List<Person>(); int score; ... foreach (Person p in People){ score = scoreFunc(p); ??? } List People=newlist(); 智力得分; ... foreach(人员中的人员p){ 分数=scoreFunc(p); ??? } 问题-如何根据分数对Person对象列表进行排序? 如果你想知道,

考虑以下伪代码:

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

...

foreach (Person p in People){

score = scoreFunc(p);

???

}
List People=newlist();
智力得分;
...
foreach(人员中的人员p){
分数=scoreFunc(p);
???
}
问题-如何根据分数对Person对象列表进行排序?
如果你想知道,我不想让分数成为个人的财产,因为同一个人在不同的情况下,分数会有所不同,逻辑上也不是个人的财产

排序是使用一个可以比较两个人的委托/类进行的-您不需要使用单个属性来比较他们。比如说

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

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


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

排序使用可以比较两个人的代理/类进行-您无需使用单个属性来比较他们。比如说

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

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


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

“分数”当然可以制作一个数组,或者根据需要添加到集合中作为“分数”当然可以制作一个数组,或者根据需要添加到一个集合中。贝桑克斯,你认为你可以对你的答案进行一点扩展吗?你建议如何使用这个比较来对整个列表进行排序?@Ivan,我不是100%确定你想问什么。。。不过,请看我的编辑!谢谢,你认为你可以把你的答案再扩展一点吗?你建议如何使用这个比较对整个列表进行排序?@Ivan,我不完全确定你想问什么。。。不过,请看我的编辑!