说明(2017-7-17 21:34:59):

原文:https://my.oschina.net/Tsybius2014/blog/298702?p=1

另一篇比较好的:https://wenku.baidu.com/view/b53cd250ad02de80d4d84073.html

摘要: C# 使用IComparer自定义List类的排序方案

List类中不带参数的Sort函数可以用来为List类中的元素排序,但如果List类中的元素类型本身不能直接进行比较(如自定义的struct和很多class),或是希望采用更加灵活的自定义比较方式,可以通过继承了IComparer接口的函数来解决。

代码示例如下:

1)声明一个类

/// <summary>
/// 人物类
/// </summary>
public class Person
{
public string Name;
public int Age;
public override string ToString()
{
return "Name: " + Name + " Age: " + Age;
}
}

2)声明一个继承了接口IComparer的类

/// <summary>
/// 比较人物类实例大小,实现接口IComparer
/// </summary>
public class PersonComparer : IComparer<Person>
{
public int Compare(Person x, Person y)
{
if (x == null && y == null) return 0;
if (x == null) return -1;
if (y == null) return 1; //TODO:Person类实例X与Y的比较规则
//按姓名由小到大排列,姓名相同的人年龄大的在前
{
int temp = string.Compare(x.Name, y.Name);
if (temp > 0) return -1;
else if (temp < 0) return 1; if (x.Age > y.Age) return 1;
if (x.Age < y.Age) return -1;
} return 0;
}
}

3)Main函数,建立一个List,并使用刚建立的PersonComparer类中的规则对List进行排序

static void Main(string[] args)
{
List<Person> a = new List<Person>(); a.Add(new Person() { Name = "Tsybius", Age = 23 });
a.Add(new Person() { Name = "Galatea", Age = 21 });
a.Add(new Person() { Name = "Lucius", Age = 22 });
a.Add(new Person() { Name = "Septimus", Age = 22 });
a.Add(new Person() { Name = "Octavius", Age = 22 });
a.Add(new Person() { Name = "Lucius", Age = 24 }); //输出a中全部元素
Console.WriteLine("排序前");
foreach (var v in a)
{
Console.WriteLine(v.ToString());
}
Console.WriteLine("-"); //对a进行排序
a.Sort(new PersonComparer()); //输出a中全部元素
Console.WriteLine("排序后");
foreach (var v in a)
{
Console.WriteLine(v.ToString());
}
Console.WriteLine("-"); Console.ReadLine();
}

4)程序运行示例

END

C#学习笔记(14)——C# 使用IComparer自定义List类的排序方案的更多相关文章

  1. C# 使用IComparer自定义List类的排序方案

    List类中不带参数的Sort函数可以用来为List类中的元素排序,但如果List类中的元素类型本身不能直接进行比较(如自定义的struct和很多class),或是希望采用更加灵活的自定义比较方式,可 ...

  2. Python学习笔记(4):自定义时间类

    Python的时间我实在无法接受,太难用了.我觉得C#的时间就非常完美,简单.好用.所以,自定义了自己的时间类: 用法: 一个小小的应用,我需要取出每天股市交易的分钟段,开始是这样的: 稍微改进一下, ...

  3. Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法

    Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...

  4. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  5. 并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理

    1. 概述 1.1 什么是线程池 与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去 ...

  6. 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计

    [转] C#学习笔记14——Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计   .NET Framework 命名空 ...

  7. Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮

    上次介绍了 Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 现在开始介绍如何配置审批流,首先在form上添加三个按钮,Submit, Agree, Reject: 1. ...

  8. Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)

    前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...

  9. SQL反模式学习笔记14 关于Null值的使用

    目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...

随机推荐

  1. 问题 “No mapping found for HTTP request with URI [/fileupload/upload.do]” 的解决

    是因为自己springmvc的配置文件里面不小心删除掉了 <!-- 注解扫描 扫描该包下的注解--> <context:component-scan base-package=&qu ...

  2. 利用hadoop来解决“单表关联”的问题

    已知 child parent a b a c d b d c b e b f c g c h x g x h m x m n o x o n 则 c 2+c+g 2+c+h 1+a+c 1+d+c ...

  3. 必须掌握的30种SQL语句优化

    1.’对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用 ...

  4. mysql数据库热备份

    使用Percona XtraBackup 先安装依赖包 yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes libaio* 到Percona官 ...

  5. xcode修改项目名后反复出现 clang error

    xcode修改项目名后反复出现 clang error,  提示 ld: file not found . 并且该错误并不是出现在项目编译阶段,而是项目的Tests 的link阶段, 同时提示 xct ...

  6. mark CodeGenerator

    基础权限开发框架 BMS = Spring boot + Mybatis plus + Shiro     BMS / bms-admin  / src  / main  / java  / com  ...

  7. Python 爬虫 数据清洗 去掉 超链接

    有时候我们需要清洗数据,里面有超链接,怎么去掉他们,比如下面的问题 , - January , </p></li><li </p><div " ...

  8. sublime unityshaderplugin

  9. 在ubuntu16安装supervisor 并 启动 .net core.

    1. 安装supervisor apt-get install supervisor 2.新建supervisor配置文件.使用以下命令在linux 命令行 echo_supervisord_conf ...

  10. xocodebulid 自动化打包 解决提示 ld: library not found for -lPods 问题

    如果你的项目用到cocopod 第三方库.使用xcodebulid 估计会出现 ld: library not found for -lPods 以下 是我的解决办法 xcodebuild -work ...