诸如List&ltT&gt等泛型集合类,直接提供了sort()方法用于将集合中的元素进行排序。

但是,其前提是集合中存放的是可直接排序的基本类型,如List&ltint&gt, List&ltdouble&gt,如果

我们定义了一个自定义类型 Class MyClass,并创建一个自定义类型的集合如List&ltMyClass&gt,

那么无参的sort()方法就不可用了,因为不知道如何排序了。这时就需要借助:

IComparer 和 IComparable

首先,我们来看一下c#泛型List提供的Sort方法:

泛型List类的Sort方法有四种形式,分别是

1,不带有任何参数的Sort方法----Sort();

2,带有比较器参数的Sort方法 ----Sort(IComparer&ltT&gt)

3,带有比较代理方法参数的Sort方法----Sort(Comparison&lt(Of &lt(T&gt)&gt))

4,带有比较器参数,可以指定排序范围的Sort方法----Sort(Int32, Int32 IComparer(T))

【解析:】第一种方法

使用这种方法不是对List中的任何元素对象都可以进行排序,List中的元素对象必须继承IComparable接口,并且要实现IComparable接口中的CompareTo()方法,在CompareTo()方法中要自己实现对象的比较规则。

例如,Int32和Double都是实现了IComparable接口并重载了CompareTo方法的结构。(注:int和double都是Int32和Double的别名(alias))

【解析:】第二种方法

2,带有比较器参数的Sort方法 ----Sort(IComparer&ltT&gt),

1)创建一个额外的比较器类:其实就相当于将排序功能中的比较操作,留个使用者来完成。这个比较操作必须在实现了IComparer接口的自定义比较类中完成;如:

class myComparer:IComparer&ltMyClass&gt

2)制定比较规则实现比较方法:因为接口中有一个用于比较的重载函数Compare,所在在比较器类中我们必须实现它,完成自己希望的比较。所谓自己希望的比较就是说自己实现自定义对象的比较规则,例如你知道自定义类MyClass中哪个属性适合用来排序,那么就选择这个属性作为整个自定义类对象的排序属性,如该类中有年龄,学号,入学日期等属性,你可以选择年龄属性作为排序属性。如:

public class myComparer:IComparer&ltMyClass&gt

{

//实现按年龄升序排列

public int Compare(MyClass x, MyClass y)

{

return (x.age.CompareTo(y.age)); //age代表年龄属性是整型,即其已支持CompareTo方法

}

}

3)使用比较器的排序方法调用:然后,在自定义类型的集合如List&ltMyClass&gt myList,上就可以进行sort排序了,如

myList.Sort(new myComparer());

【解析:】第三种方法

3,带有比较代理方法参数的Sort方法----Sort(Comparison&lt(Of &lt(T&gt)&gt))

Comparison&lt(Of &lt(T&gt)&gt是一种泛型委托。所以,需要编写一个对象排序比较的方法,对List中的元素对象没有特殊的要求,但在比

c#sort升序还是降序_c# List的sort排序方法详解相关推荐

  1. c#sort升序还是降序_C#中对数组或集合进行升序或降序排序

    在.net framework中,数组和集合都实现了用于排序的方法sort(),数组通过调用Array.Sort(数组名)排序,集合通过调用 集合对象.Sort()方法排序. 默认的排序是使用升序排列 ...

  2. java列表排序sort_java list(java list排序sort升序、降序)

    javalist List是Java中比较常用的调集类,关于List接口有许多完成类,本文就来简略介绍下其间几个重点的完成ArrayList.LinkedList和Vector之间的联系和差异. Li ...

  3. Java实现TreeMap集合的排序:Key键的升序与降序、Value值的排序

    Java 提供的 Map 接口常用的实现类有 HashMap 和 TreeMap.HashMap 类实现的 Map 集合对于添加和删除映射关系效率更高.HashMap 通过哈希码对其内部的映射关系进行 ...

  4. c#sort升序还是降序_被玩坏的数组排序之sort函数

    JavaScript 的数组排序是一个非常常见业务场景 ECMAScript 为数组提供了一个原生的sort函数,今天我们就来好好看看你对sort函数究竟了解多少. 首先我们来看一下sort函数的基本 ...

  5. c#sort升序还是降序_Linux排序命令sort笔记

    很多时候Linux需要对文本相对比较规范的文本数据进行排序,这时候可以使用Linux系统下的sort命令进行处理. 语法格式:sort [-ntkr] filename 常用参数: -n 根据数字进行 ...

  6. Matlab进行升序降序,matlab sort()升序和降序

    B = sort(A) %沿着输入参量 A的不同维的方向.从小到大重新排列 A中的元素.A 可以是字符串的.实数的.复数的单元数组.对于 A 中完全相同的元素,则按它们在 A 中的先后位置排列在一块: ...

  7. Collections.sort升序和降序

    如果是对List<Integer> 或者 List<String> 这样本身就实现了Comparable接口的泛型集合排序. 如果使用Collections.sort(List ...

  8. matlab sort descend,matlab sort()升序和降序

    B = sort(A) %沿着输入参量 A的不同维的方向.从小到大重新排列 A中的元素.A 可以是字符串的.实数的.复数的单元数组.对于 A 中完全相同的元素,则按它们在 A 中的先后位置排列在一块: ...

  9. SQL Server 使用ORDER BY 关键字进行排序(升序、降序、多个字段排序)

    1 使用详解 ORDER BY关键字 说明:用于对结果集按照一个列或者多个列进行排序.默认按照升序排序.降序使用 DESC 关键字,升序使用ASC关键字. 语法: SELECT * FROM tabl ...

最新文章

  1. JavaScript初学者编程题(10)
  2. SQL判断文件是否存在
  3. pyqt 槽任意参数_PyQt5快速入门(二)PyQt5信号槽机制
  4. 机器人视觉——使用numpy进行像素的处理 || 获取图像的属性 || 感兴趣区域ROI || 通道的拆分与合并
  5. JAVA调用HTTP接口
  6. 模型设计器工具控件LinqConnect
  7. BaseColumns类的作用
  8. 安装gid12.0.4linux-x64l后启动报错/liblzma.so.5: no version information available 的解决办法
  9. 一个简单的堆栈,逻辑很清晰
  10. 【DirectX3D - 5】渲染多路视频(单一窗口)
  11. java Deque 接口
  12. 紫光华宇拼音输入法 6.x bug集
  13. Linux驱动 | DS18B20驱动编程
  14. 云服务器怎么连,云主机连接操作步骤是怎样的?
  15. Cosy主题3.0使用教程
  16. Educational Codeforces Round 126 (Rated for Div. 2)(A-E)
  17. idea和eclipse哪个更好用?为什么呢?
  18. 利用Flash制作一个可以自由拨动的时钟模具
  19. lnmp搭建qq农场
  20. 通过虚拟机模拟linux操作系统

热门文章

  1. 吴涛 :低延迟传输协议和新Codec将成为热点
  2. 极速搭建一个个人博客网站
  3. 视频回顾丨带你逛腾讯全球数字生态大会「腾讯技术工程」展区
  4. CFA将人工智能列入考试内容折射啥
  5. idea下org.apache.commons.dbcp.BasicDataSourc找不到
  6. Vue007_ 表单输入绑定
  7. 数据库不推荐使用外键的9个理由
  8. java基础--集合案例斗地主发牌排序
  9. 【Git】从Git远程存储库中删除所有.pyc编译文件;附常用gitignore配置
  10. 【PAT甲级】11077 Kuchiguse (20 分) Java