分享一个可以用来做排名的代码片段,除了可以根据数值大小做排序之外,同时实现相同数值的名次并列。
代码片段如下:
var list = new [] { 100, 200, 200, 300, 400, 500, 500, 600, 700, 100 };
list.Dump();
var rank = 1;
var prev = -1;
var preRank = 0;
var result =
from item in list
orderby item descending
let current = rank++
select new
{
Value = item,
Rank = preRank = ((prev == (prev = item)) ? preRank : current)
};
result.Dump();
执行前数组
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
数值 | 100 | 200 | 200 | 300 | 400 | 500 | 500 | 600 | 700 | 100 |
执行后列表
序号 | 1 | 2 | 3 | 3 | 5 | 6 | 7 | 7 | 9 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
数值 | 700 | 600 | 500 | 500 | 400 | 300 | 200 | 200 | 100 | 100 |