Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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_Ranking - Fatal编程技术网

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

得分对
团队进行排序,然后跳过相同得分的排名增量?按
得分对
团队进行排序,然后跳过相同得分的排名增量?