使用LINQ获取表格中的位置
本文关键字:位置 表格 LINQ 获取 使用 | 更新日期: 2023-09-27 18:22:51
我有带列的表播放器:ID名称点
使用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);
}