Linq选择将为类似值生成关联分数

Eoi*_*ell 0 .net c# linq select .net-4.5

我正在尝试根据分数生成一个简单的排名表.

例如,给出以下内容

List<Player> players = new List<Player>() {
    new Player { Name = "John", Score = 2 },
    new Player { Name = "Mary", Score = 1 },
    new Player { Name = "Bob", Score = 2 },
    new Player { Name = "Alice", Score = 3 },
};

var results = players
      .OrderByDescending(o => o.Score)
      .Select((v,i) => new { Name = v.Name, Score = v.Score, Position = i+1} );
Run Code Online (Sandbox Code Playgroud)

结果将是.

Name  Score Pos
Alice 3     1 
John  2     2 
Bob   2     3 
Mary  1     4 
Run Code Online (Sandbox Code Playgroud)

相反,我希望结果如此

Name  Score Pos
Alice 3     1 
John  2     2 
Bob   2     2 <---- this guy is tied for second 
Mary  1     4 <---- this one still comes fourth
Run Code Online (Sandbox Code Playgroud)

无论如何在Linq Select期间访问上一个或下一个元素,以便您知道是增加还是减少索引值?

Pie*_*r21 5

这样的事情会为你做什么?

  .Select((v,i) => new { Name = v.Name, 
                         Score = v.Score, 
                         Position = 
                            players.Count(p => p.Score > v.Score) + 1
                       }
         );
Run Code Online (Sandbox Code Playgroud)