根据值获取列表中的项目索引

时间:2017-05-26 12:57:01

标签: c# linq indexof

该场景适用于橄榄球联赛。我可以按比赛胜率百分比排序,然后按进球分数来确定他们在联赛中的位置。然后我使用这个排序来使用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。

有没有办法找到正确的位置?

3 个答案:

答案 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;
});