使用LINQ获取表格中的位置

本文关键字:位置 表格 LINQ 获取 使用 | 更新日期: 2023-09-27 18:22:51

我有带列的表播放器:ID名称点

使用LINQ获得按点数排序的玩家位置的最有效方法是什么?

使用LINQ获取表格中的位置

任何解决方案都需要对所有元素进行至少一次迭代,但以下内容就足够了:

var ordered = players.OrderByDescending(p => p.Points).ToList();

这将在一个过程中对元素进行排序,然后将结果存储在列表中,以保留排序,而无需再次"排序":

int position = ordered.IndexOf(player);

您的需求是一个单一的linq查询,但这是一种方法:

int pos = 0;
foreach(var item in Players.OrderByDescending(u =>u.Points).ToList())
{
  pos++;
  if (item.Name == yourPlayerName)
  break;
} 
return pos;

获取位置的另一个选项(与Akrem的类似,但不手动迭代集合)。

    [TestMethod]
    public void TestMethod()
    {
        var table = new[] 
        {
            new{ Id = 1, Name = "Paul", Points = 10},
            new{ Id = 2, Name = "Ringo", Points = 2},
            new{ Id = 3, Name = "George", Points = 30},
            new{ Id = 4, Name = "John", Points = 5}
        };
        int position = table.OrderByDescending(x => x.Points).TakeWhile(x => x.Name != "Paul").Count() + 1;
        Assert.AreEqual(2, position);
    }