排名项目与LINQ名单 [英] Ranking items in a list with LINQ

查看:208
本文介绍了排名项目与LINQ名单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找出一种方法来在列表项目排序,并保持结果的对象或其他列表。我知道的排序依据的方法,但我并不确切地知道如何去创造每一个项目对应的排名。

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.

这篇关于排名项目与LINQ名单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆