我试图找出一种方法来对列表中的项目进行排名,并将结果保存在对象或其他列表中.我知道orderby方法,但我不知道如何为每个项目创建相应的排名.
例如:
List<int> numbers = new List<int>();
numbers.Add(650);
numbers.Add(150);
numbers.Add(500);
numbers.Add(200);
Run Code Online (Sandbox Code Playgroud)
然后在这里存储从低到高或从高到低的结果:
public class NumberRank
{
public int Number {get; set;}
public int Rank {get; set;}
public NumberRank(int number)
{
Number = number;
Rank = ????????;
}
}
Run Code Online (Sandbox Code Playgroud)
通过LINQ的任何解决方案?
Cyr*_*don 17
Select扩展方法的一个重载返回索引:
通过合并元素的索引,将序列的每个元素投影到新的形式中.
您可以使用它来获得排名:
public class NumberRank
{
public int Number {get; set;}
public int Rank {get; set;}
public NumberRank(int number, int rank)
{
Number = number;
Rank = rank;
}
}
List<int> numbers = new List();
numbers.Add(650);
numbers.Add(150);
numbers.Add(500);
numbers.Add(200);
numbers.OrderBy(n => n)
.Select((n, index) => new NumberRank(n, index));
Run Code Online (Sandbox Code Playgroud)
iam*_*mCR 12
这应该这样做:
public class NumberRank
{
public int Number {get; set;}
public int Rank {get; set;}
public NumberRank(int number, int rank)
{
Number = number;
Rank = rank;
}
}
class Test
{
static void Main()
{
List<int> numbers = new List<int>();
numbers.Add(650);
numbers.Add(150);
numbers.Add(500);
numbers.Add(200);
List<NumberRank> numberRanks = numbers.OrderByDescending(n => n).Select((n, i) => new NumberRank(n, i + 1)).ToList();
// check it worked
foreach(NumberRank nr in numberRanks) Console.WriteLine("{0} : {1}", nr.Rank, nr.Number);
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
要按升序排列(即最低编号,请先按顺序排列),然后按OrderBy替换OrderByDescending.
| 归档时间: |
|
| 查看次数: |
12217 次 |
| 最近记录: |