c# List的排序
2016-06-23 17:19
411 查看
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(); //这样我们也把他进行了一次排序
基本上就是使用这几种方式就可以完整的做好排序工作。
但愿前面看到的朋友没有被误导,如果有表示抱歉,现已经更正.
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(); //这样我们也把他进行了一次排序
基本上就是使用这几种方式就可以完整的做好排序工作。
但愿前面看到的朋友没有被误导,如果有表示抱歉,现已经更正.
相关文章推荐
- C#之虚函数
- C# EventHandler 委托
- C#中关于DataGridView行和列的背景色-前景色设置
- DataGridView控件使用大全
- c#winform自定义listview,解决listview闪缩问题,添加listview单元格单击事件。
- c# ActiveX 手动申请,释放资源
- C# 拖拽下载实现
- C# 右下角弹出窗口
- c#winform禁用关闭按钮的方法
- C# time.ToString("yyyyMMddHH") "yyyyMMdd"TO--DateTime
- C#查看Windows系统Task Scheduler内任务的运行状态
- C#中构造函数和析构函数用法实例详解
- 『片段』C# DateTime 时间相减 和 时区的关系
- C# 几种数据类型转换方式
- 过滤DataTable数据的Select()方法
- C# DataTable常用方法总结
- C#使用二叉树算法设计一个无限分级的树表
- 11 在C#中写文件
- C#中picturebox上的Label如何实现透明
- 浅谈如何在C#Winform程序中正确使用登录窗体