该场景适用于橄榄球联赛。我可以按比赛胜率百分比排序,然后按进球分数来确定他们在联赛中的位置。然后我使用这个排序来使用IndexOf
函数让团队在联赛表中排名。
this.results = this.results.OrderByDescending(x => x.WinPercentage).ThenByDescending(x => x.Goals);
this.results.Foreach(x => x.Position = this.results.IndexOf(x));
当两支球队(应该是联合#1)拥有相同的比赛胜率和得分时,问题就出现了,但是当获得索引时,一支球队将被分配#1而另一支球队将被分配#2。
有没有办法找到正确的位置?
答案 0 :(得分:2)
var position = 1;
var last = result.First();
foreach(var team in results)
{
if (team.WinPercentage != last.WinPercentage || team.Goals != last.Goals)
++position;
team.Position = position;
last = team;
}
答案 1 :(得分:1)
你可以做的是根据胜率和目标对项目进行分组(如果两者相同,团队将在同一组中),然后将相同的位置编号应用于同一组中的每个元素: / p>
return RedirectToAction("Index","Home");
答案 2 :(得分:1)
以下代码代码适用于您
this.results = this.results.OrderByDescending(x => x.WinPercentage).ThenByDescending(x => x.Goals);
this.results.Foreach(x =>
{
int index = this.results.FindIndex(y => y.Goals == x.Goals && y.WinPercentage == x.WinPercentage);
x.Position = index > 0 ? this.results[index - 1].Position + 1 : 0;
});