c#之IComparable<T>接口、IComparer<T>接口及Comparison<T>委托应用于集合排序_c# comparison<t>_jiuzaizuotian2014的博客-程序员宅基地

技术标签: C#语言  Sort  

C#中的集合类常常需要排序,集合类的Sort方法是常用方法。

比如 List<T> list=...,需要对list进行排序,可以用list.Sort()方法。该方法有多个重载。

(1) IComparable<in T>接口   

即  public interface IComparable<in T>

{

    int CompareTo(T other);

}

当某对象实现了该接口,则表示该对象是可排序的。

 

(2)IComparer<T>接口

表示排序器。对于没有实现Comparable<T>接口的对象,可以为其创建实现IComparer<T>接口的排序器,用于排序。录入,可以为Sort传入IComparer<T>的实现类的实例对象,该接口为:

public interface IComparer<in T>
{

    //如果x小于y,则返回负数;x大于y,返回正数;等于则返回0
    int Compare(T x, T y); 

}

void Sort(IComparer<T> comparison);

如果使用IComparer<T>实现类的实例对象,则需要实现定义好实现类,对于已经定义好的,则比较方便,否则相对麻烦一些。

 

(3)Comparison<T>委托

但是对于没有定义IComparer<T>的实现类的场合,可以使用更为方便的方式,即使用Comparison<T>委托作为参数。

public delegate int Comparison<in T>(T x, T y);

void Sort(Comparison<T> comparison);

具体使用时,可以直接传入委托(或函数名称),也可以直接使用numda表达式。以下是使用numda表达式的方法代码:

List<Student> list=new List<Student>();  //Student类中含有Age属性
list.AddRange(....);  //添加数据 

//以下对Student集合按照其Age属性从小到大排序
list.Sort( (x, y) =>
                    {
                        if (x.Age < y.Age)
                        {
                            return -1;
                        }
                        else if (x.Age > y.Age)
                        {
                            return 1;
                        }
                        else
                            return 0;
                    }
                    );    

或者以下更加简单的写法********:
list.sort((x,y)=>x.Age.CompareTo(y.Age));   

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jiuzaizuotian2014/article/details/82425521

智能推荐

Linux-文件管理命令-程序员宅基地

linux系统结构linux是一个倒树型结构,最大的目录名称叫“/” (根目录)linux系统中的二级目录/bin 二进制可执行文件,系统常规命令/boot 启动目录,存放系统自动启动文件,内核,初始化程序/dev 系统设备管理文件/etc 大多数系统配置文件存放路径/home/子目录 普通用户家目录/lib 函数库/lib64/ 64位函数库/media 临...

macOS Monterey官方镜像下载地址 - 迅雷可用 - 12.13G_macos官方下载地址_Rudon滨海渔村的博客-程序员宅基地

下载地址macOS Monterey系统下载地址:https://swcdn.apple.com/content/downloads/39/60/002-23774-A_KNETE2LDIN/4ll6ahj3st7jhqfzzjt1bjp1nhwl4p4zx7/InstallAssistant.pkgmacOS Monterey 与以下电脑兼容macOS Monterey 与以下电脑兼容 - Apple 支持 (中国)https://support.apple.com/zh-cn/._macos官方下载地址

交互式甘特图VARCHART XGantt:如何计算活动结束日期(ActiveX版)_gantt结束日期-程序员宅基地

VARCHART XGantt是一个交互式的甘特图控件,其模块化的设计让您可以创建满足您和您的客户所需求的应用程序。可以快速、简单地集成到您的应用程序中,帮助您识别性能瓶颈、避免延迟以及高效利用资源,使复杂数据变得更加容易理解。本篇文章主要解释了VARCHART XGantt如何计算活动结束时间,感兴趣的朋友可以自己动手操作一下哦~结束日期的表列仍为空。可以在VARCHART XGantt..._gantt结束日期

C++ new 和 malloc 内部的实现方式的区别-程序员宅基地

new 和 malloc 内部的实现方式有什么区别?new 的功能是在堆区新建一个对象,并返回该对象的指针。所谓的【新建对象】的意思就是,将调用该类的构造函数,因为如果不构造的话,就不能称之为一个对象。而 malloc 只是简单的分配一块内存,在内存中并没有对象的概念,如果用 mallco 在堆区创建一个对象的话,是不会调用构造函数的。严格说来用 malloc 不能算是新建了一个对象,只能说是分配了一块与该类对象匹配的内存而已,然后强行把它解释为【这是一个对象】,按这个逻辑来看,也不存在构造

【python】【consul】注销consul集群中不可用的服务_python 批量注销consul-程序员宅基地

【consul】注销consul集群中不可用的服务二进制程序:python脚本: https://github.com/Jacksliwen/py-consul-control使用方法 python DeregisterAllUnavailableService.py [集群中的一台机器IP]_python 批量注销consul

百度地图开发:如何计算两点之间距离_百度地图开发获取的距离,需要准备什么-程序员宅基地

百度地图开发:如何计算两点之间距离 2012-11-26 22:04:27| 分类:百度地图开发 | 标签:android开发 百度地图开发 |举报|字号大中小 订阅路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法。如果是计算任意两点的距离,有两种方法:一种利用勾股定理计算,适用于两点距离很_百度地图开发获取的距离,需要准备什么

随便推点

Mac下搭建FastDFS_mac go-fastdfs-程序员宅基地

准备下载安装包https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.ziphttps://github.com/happyfish100/fastdfs/archive/V6.06.ziphttps://github.com/happyfish100/libfastcommon/archive/V1.0.43.ziphttp://nginx.org/download/nginx-1.18.0.tar.gz(我用的1_mac go-fastdfs

如何修改csdn的默认的显示ID名称-程序员宅基地

1、注册时,系统会默认分配一个ID号码:如下图weixin_45176834。2、在博客主页中的名称默认显示的是ID号,在个人中心–>修改资料中修改昵称即可。3、修改后,发博客作者名称就显示为修改后的昵称。...

Min-Max容斥总结_minmax容斥-程序员宅基地

下用max⁡k(S)\max_k(S)maxk​(S)表示集合SSS的第kkk大元素(k⩽∣S∣k\leqslant|S|k⩽∣S∣),max⁡(S)\max(S)max(S)表示集合SSS的最大元素,最小同理算法min-max容斥是一种用于求出给定集合第kkk大(小)元素的容斥,通常在比较元素大小较为困难时使用有一给定集合SSS,现希望求出max⁡k(S)\max_k(S)maxk​(S),考虑构造系数ana_nan​满足:max⁡k(S)=∑∅≠T⊆Sa∣T∣min⁡(T)\max{_k}(_minmax容斥

php单击图片刷新验证码,thinkphp点击图片刷新验证码_杀手海王的博客-程序员宅基地

本类验证码功能刷新功能,涉及到两个刷新,一个是点击验证码图片刷新,另一个是输错验证码刷新,当然自己刷新那就不要说了,那是肯定会刷新的。thinkPHP框架里面内置了verify.class.php验证类,我们做验证码验证的时候就非常简单了,这里提供两种验证的格式,一个纯数字,一个是系统默认的,其中里面的方法都是写在login控制器中的方法,具体代码如下//第一种默认的验证码public funct..._php点击图片刷新验证码

JQuery动态创建表格时样式错乱解决-程序员宅基地

最近在做一个工资查询的页面,在Ajax获取到数据之后,我用JQuery动态创建一个表格来进行展示,但是运行之后发现数据的第一行跟标题行挤在了同一行,样式错乱,十分难看。在网上找了很久,各种方法试了都没有起到作用,最后,我试到了解决办法:动态创建时,写明表格的标签和标签手动把它写出来问题解决。...

CF1341C. Nastya and Strange Generator(思维 模拟 构造)_Cutele_的博客-程序员宅基地

linkkkk题意:给出nnn,要求将1 n1~n1 n的数放到nnn个位置,问给出的ppp数组能否按照如下规则放置得到。规则是:rrr数组满足ri>=ir_i>=iri​>=i并且rir_iri​没有被占用,cic_ici​表示rrr数组里值为iii的数的个数。每次选择ccc数组的最大值放置对应的位置放置,如果有多个位置的话,任意选择一个放置。思路:模拟一下样例后发现,如果一个元素放在了第kkk个位置,那么下一个元素会放在第k+1k+1k+1个位置,因为这时_cf1341c

推荐文章

热门文章

相关标签