C# 使用linq查找索引位置,但要考虑依赖于某个值的关系
按值排序的最佳方法是什么,根据项目的排名找到该项目的索引,但要考虑联系。第五名的索引可能有两个项目,因此跳过第六名,下一次迭代从第七名开始。最好的方法是分组并跟踪索引吗C# 使用linq查找索引位置,但要考虑依赖于某个值的关系,c#,asp.net,linq,C#,Asp.net,Linq,按值排序的最佳方法是什么,根据项目的排名找到该项目的索引,但要考虑联系。第五名的索引可能有两个项目,因此跳过第六名,下一次迭代从第七名开始。最好的方法是分组并跟踪索引吗 return teamTournamentResults .OrderByDescending(t => t.RankingPoints) .Select((item, index) => new { Item = item, Index = index }) .Select(q => new TeamSumm
return teamTournamentResults
.OrderByDescending(t => t.RankingPoints)
.Select((item, index) => new { Item = item, Index = index })
.Select(q => new TeamSummaryResultsModel
{
DivisionRanking = q.Index + 1,
RankingPoints= q.Item.RankingPoints,
您是否需要为所有项目找出单个项目的排名?如果您只需要一个,则不需要排序 您可以在线性时间内使用一个简单的
for
循环来计算更小和更大的项目,以及相等项目的列表。然后,您只需对相等项列表应用相同的过程,但按团队名称进行比较,以获得一致的顺序
var equalItems = new List<Team>();
int smaller = 0, bigger = 0;
var myItem = ...;
foreach(var item in teamTournametResults)
if (item.RankingPoints > myItem.RankingPoints)
++bigger;
else
{
if (item.RankingPoints < myItem.RankingPoints)
++smaller;
else if (item != myItem)
equalItems.Add(item);
}
foreach(var item in equalItems)
if (item.Name.CompareTo(myItem.Name) > 0)
++bigger;
else
++smaller;
var equalItems=new List();
小整数=0,大整数=0;
var myItem=。。。;
foreach(teamTournametResults中的var项)
如果(item.RankingPoints>myItem.RankingPoints)
++更大;
其他的
{
if(item.RankingPoints0)
++更大;
其他的
++较小的;
结果排名现在存储在
biger
请阅读我对问题的评论
请看一个示例:
List<int> mi = new List<int>(){1,2,2,5,6,7,7,7,8,9,10,10};
var qry = mi
.Select(g=>new
{
number = g,
rank = (from i in mi where i>g select i).Count()+1
});
其他有用资源:
你看过这个吗:?
number rank
1 12
2 10
2 10
5 9
6 8
7 5
7 5
7 5
8 4
9 3
10 1
10 1