持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
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的序列。
有时用户需要按某项排序,但是查询结果以List格式存储,我们当然可以自己编写一个快速排序的方法进行排序,但是还有多个选择,并且可能比你写的短、效率也不差,那不如在恰当的时候选择其他方法对List进行排序。
1,对于普通的int,double型列表List,如下:
List<int> list = new List<int>();
list.Sort(); // 升序排序
list.Reverse(); // 降序排序:先升序排序,再反转顺序
对于Class型的列表List,根据类的某一属性进行排序,如下:
方法一: List的OrderBy与OrderByDescending方法
list.OrderBy(a => a.Value).ToList();//升序
list.OrderByDescending(a => a.Value).ToList();//降序
方法二:使用Sort方法,
list.Sort((a, b) => a.Value.CompareTo(b.Value));//升序
list.Sort((a, b) => b.Value.CompareTo(a.Value));//降序
方法三:使用委托
list.Sort(delegate (CapVal cv1, CapVal cv2) { return cv1.Value.CompareTo(cv2.Value); });
方法四:使用Linq
c#的一大特色就是Linq,他遍布c#里里外外,利用他可以减少大量的代码,不过他是从SQL中出来的,所以SQL还是了解之后,这个就好懂了。具体代码如下所示:
List<CapVal> upList = (from cv in list
orderby cv.Value ascending
select cv).ToList();//升序
List<CapVal> downList = (from cv in list
orderby cv.Value descending
select cv).ToList();//降序
需要注意的是,系统自带的变量(int,float,double......)一般都可以直接Sort,自定义类sort有两种方法:一是继承接口(IComparable);二是在Sort中传入委托函数。