根据某些条件从对象列表中获取排名



>我有包含totalScore作为一个属性的类的对象列表。我想根据团队的总分获得团队排名。这是我称之为列表数据=新列表()的对象列表;

因此,数据包含具有总分属性的记分板类的对象。我需要根据总分对团队进行排名。这是我尝试的代码,但它给出的结果类似于 Rank=1,2,2,3,但我需要像这样的 Rank=1,2,2,4。

data.OrderByDescending(x => x.totalScore).GroupBy(x => x.totalScore)
    .SelectMany((g, i) => g.Select(e => new { data = e.Rank = i + 1 }))
    .ToList();

数据列表包含唯一的团队,但总分可能相同,因此相同的总分团队必须处于一个等级中。 请帮帮我!

如果需要就地更新列表:

int i = 0;
decimal? prevValue = null;
foreach(var item in data.OrderByDescending(x => x.totalScore))
{
    item.Rank = prevValue == item.totalScore ? i : ++i;
    prevValue = item.totalScore;
}

一种不同的表示法(为了可读性,我更喜欢它),但本质上与 user3185569 提供的答案相同。

var i = 1;
var results = (from d in data orderby d.totalScore descending select new { Obj = d, Rank = i++ } ).ToList();

相关内容

  • 没有找到相关文章

最新更新