我试图找出一种方法来在列表项目排序,并保持结果的对象或其他列表。我知道的排序依据的方法,但我并不确切地知道如何去创造每一个项目对应的排名。
I am trying to figure out a way to rank items in a list, and hold the results in an object or another list. I know about the orderby method, but I don't exactly know how to go about creating a corresponding rank number for each item.
例如:
List<int> numbers = new List<int>();
numbers.Add(650);
numbers.Add(150);
numbers.Add(500);
numbers.Add(200);
,然后存储结果无论从低到高或高到低的位置:
and then store the results from either low to high or high to low here:
public class NumberRank
{
public int Number {get; set;}
public int Rank {get; set;}
public NumberRank(int number)
{
Number = number;
Rank = ????????;
}
}
通过LINQ任何解决方案?
Any solutions through LINQ?
这应该做到这一点:
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();
}
}
要排名升序排列(即最低数量的第一),那么只需更换OrderByDescending通过排序依据。
To rank in ascending order (i.e. lowest number first), then just replace OrderByDescending by OrderBy.