c# List的排序

list 是我们常用到的数据类型,我们常常会用list去处理很多的数据。我们也常常会有这样的一个操作,就是排序sort

list 所在的命名空间是System.Collections.Generic

排序的方式

一 对于基本的数据类型,本身又icompare的继承的我们可以直接使用list.sort();进行升序排列。不需要做任何操作

  如 我们定义

    List<int> testList = new List<int>();
    testList.Add(2);
    testList.Add(1);
          testList.Add(3);
          testList.Add(4);
          testList.Add(5);
          testList.Add(0);

直接使用testList.sort();就能得到 012345的序列

二 自己定义比较方法,这是我比较常用的,可以对多个条件进行比较,很容易进行扩展

   private int SortList(int a,int b) //a b表示列表中的元素

  {

  if(a > b) //这边的比较可以是任意的类型,只要是你可以比较的东西,比如student类中的年龄age stu1.age > stu2.age

  {
    return 1;

  }

  else  if (a < b)

  {

    return -1;

  } 

      return 0; 

  }

  最后我们调用的时候testList.sort(SortList);

三 当比较的排序项比较少甚至是一个的时候我们可以直接不写出函数然后直接使用,如下

  testList.sort((int a,int b) => { return a>b ? 1 : -1;});  其中 =>是一种匿名委托。跟定义delegate写的方式一样,也和第二种是类似的。

     最近使用的时候发现这种写法只返回1 和-1 是存在问题的。

  http://blog.csdn.net/qq276592716/article/details/7932483 这里贴上c++ stl中sort的排序算法增加理解

  他不一定会给你排出你想要的顺序,因为他的内部会分多集合去相互比较,还是回出现return 0的结果

  

testList.sort((int a,int b) => { 这里还是用if来把3中结果都判定出来})。

四 使用OrderBY/OrderByDescending选择的方式做升/降序排列 

    testList = testList.OrderBy(u=>u).ToList(); //其中u也是隐藏写法,因为我们没有需要调用的,直接用自己比较就直接这样比较久可以了。

   如果里面的项是一个class。比如上面说的Student类,那么我们可以这样

    testList = testList.OrderBy(u=>u.age).ToList(); //这样我们也把他进行了一次排序

 

基本上就是使用这几种方式就可以完整的做好排序工作。

但愿前面看到的朋友没有被误导,如果有表示抱歉,现已经更正.

posted @ 2018-10-10 11:09  chenzquan  阅读(18518)  评论(0编辑  收藏  举报