C#以某种方式为列表元素添加等级
我得到了一份按分数排序的球队名单C#以某种方式为列表元素添加等级,c#,list,ranking,C#,List,Ranking,我得到了一份按分数排序的球队名单 Team G, Score:7 Team A, Score:5 Team X, Score:4 Team Y, Score:4 Team T, Score:3 Team K, Score:3 Team P, Score:2 Team L, Score:2 Team E, Score:1 Team R, Score:1 Team O, Score:1 Team Q, Score:1 现在我根据他们的得分对这些球队进行排名 public static void A
Team G, Score:7
Team A, Score:5
Team X, Score:4
Team Y, Score:4
Team T, Score:3
Team K, Score:3
Team P, Score:2
Team L, Score:2
Team E, Score:1
Team R, Score:1
Team O, Score:1
Team Q, Score:1
现在我根据他们的得分对这些球队进行排名
public static void AddRankByScore(List<TeamExtended> teams)
{
if (teams == null) return;
var rank = 1;
foreach (var team in teams)
{
team.Rank= $"{rank}";
rank++;
}
}
但我希望队伍看起来像这样
Team G, Score:7, Rank:1
Team A, Score:5, Rank:2
Team X, Score:4, Rank:3
Team Y, Score:4, Rank:4
Team T, Score:3, Rank:5
Team K, Score:3, Rank:6
Team P, Score:2, Rank:7
Team L, Score:2, Rank:8
Team E, Score:1, Rank:9
Team R, Score:1, Rank:10
Team O, Score:1, Rank:11
Team Q, Score:1, Rank:12
Team G, Score:7, Rank:1
Team A, Score:5, Rank:2
Team X, Score:4, Rank:3
Team Y, Score:4, Rank:3
Team T, Score:3, Rank:5
Team K, Score:3, Rank:5
Team P, Score:2, Rank:7
Team L, Score:2, Rank:7
Team E, Score:1, Rank:9
Team R, Score:1, Rank:9
Team O, Score:1, Rank:9
Team Q, Score:1, Rank:9
我该怎么做?如果球队得分相同,我必须跳过一些级别。您可以添加一个检查,查看分数是否等于我们检查的
上次得分。如果是这样的话,我们开始计算我们的equalplacing
变量以增加分数,在lastscore
更改后,根据同一地点的团队数量
//该队最后一次得分。
int lastscore=0;
//同一地点的标牌数量。
int等于1;
//目前的职级。
int秩=0;
foreach(团队中的var团队){
//检查当前团队分数是否不等于上一个团队分数。
如果(team.Score!=上次得分){
秩+=等距;
等间距=1;
}
否则{
等置换++;
}
团队。等级=等级;
lastscore=团队得分;
}
为了确保排名有效,您需要以分数作为排序值按降序对列表进行排序。您可以使用Linq和.OrderByDescending()
来实现这一点
teams=teams.OrderByDescending(o=>o.Score.ToList();
您只需添加一个检查,查看分数是否等于我们检查的上次分数。如果是这样的话,我们开始计算我们的equalplacing
变量以增加分数,在lastscore
更改后,根据同一地点的团队数量
//该队最后一次得分。
int lastscore=0;
//同一地点的标牌数量。
int等于1;
//目前的职级。
int秩=0;
foreach(团队中的var团队){
//检查当前团队分数是否不等于上一个团队分数。
如果(team.Score!=上次得分){
秩+=等距;
等间距=1;
}
否则{
等置换++;
}
团队。等级=等级;
lastscore=团队得分;
}
为了确保排名有效,您需要以分数作为排序值按降序对列表进行排序。您可以使用Linq和.OrderByDescending()
来实现这一点
teams=teams.OrderByDescending(o=>o.Score.ToList();
根据得分
属性对团队
对象进行分组和排序,将秩计数器按每组计数递增,而不是按1
递增,以获得所需的输出
LINQ
示例:
publicstaticvoid AddRankByScore(列出团队)=>teams
.GroupBy(x=>x.Score)
.OrderByDescending(x=>x.Key)
.合计(1,(r,g)=>
{
g、 聚合(0,(u,t)=>t.秩=r);
r+=g.计数();
返回r;
});
foreach
示例:
publicstaticvoid AddRankByScore(列出团队)
{
var r=1;
foreach(var g)在团队中
.GroupBy(x=>x.Score)
.OrderByDescending(x=>x.Key))
{
foreach(变量t in g)
t、 秩=r;
r+=g.计数();
}
}
其中每一个都修改给定列表(团队
)的等级
属性,如下所示:
G, 7, 1
A, 5, 2
X, 4, 3
Y, 4, 3
T, 3, 5
K, 3, 5
P, 2, 7
L, 2, 7
E, 1, 9
R, 1, 9
O, 1, 9
Q, 1, 9
通过Score
属性对Team
对象进行分组和排序,将秩计数器按每组的计数而不是1
递增,以获得所需的输出
LINQ
示例:
publicstaticvoid AddRankByScore(列出团队)=>teams
.GroupBy(x=>x.Score)
.OrderByDescending(x=>x.Key)
.合计(1,(r,g)=>
{
g、 聚合(0,(u,t)=>t.秩=r);
r+=g.计数();
返回r;
});
foreach
示例:
publicstaticvoid AddRankByScore(列出团队)
{
var r=1;
foreach(var g)在团队中
.GroupBy(x=>x.Score)
.OrderByDescending(x=>x.Key))
{
foreach(变量t in g)
t、 秩=r;
r+=g.计数();
}
}
其中每一个都修改给定列表(团队
)的等级
属性,如下所示:
G, 7, 1
A, 5, 2
X, 4, 3
Y, 4, 3
T, 3, 5
K, 3, 5
P, 2, 7
L, 2, 7
E, 1, 9
R, 1, 9
O, 1, 9
Q, 1, 9
按得分对团队进行排序,然后跳过相同得分的排名增量?按得分对团队进行排序,然后跳过相同得分的排名增量?