C#使用IComparer自定义List类实现排序的方法
作者:北风其凉 发布时间:2021-06-28 04:28:09
标签:C#,IComparer,List,排序
本文实例讲述了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)程序运行示例
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 引言大家应该都知道,对Excel表格设置分页对我们预览、打印文档时是很方便的,特别是一些包含很多复杂数据的、不规则的表格,为保证打印时每一页
- 本文实例为大家分享了java模拟实现电话本系统的具体代码,供大家参考,具体内容如下java 模拟 电话本系统 (基础版)需求:注意的是,联系
- 基于 springboot+vue的测试平台开发一、前端环境搭建在前端框架vue-element-admin这个项目中,有一个简洁轻量型的项
- 本文实例为大家分享了Java实现分页功能的具体代码,供大家参考,具体内容如下不用根据改变SQL的形式去查询; 直接查询所有的数据,根据页码自
- 本文实例讲述了Hibernate环境搭建与配置方法。分享给大家供大家参考,具体如下:1.下载hibernate jar包:hibernate
- 前言我在上一篇文章聊了Redisson的分布式锁,这次继续来聊聊Redisson的公平锁。下面是官方原话:它保证了当多个Redisson客户
- delphi dll 源码:library dllres; type char1
- (一)首先说Unity调用页面方法的办法。首先是需要在工程的Asset目录里面建一个Plugins文件夹,然后在文件夹里面创建一个.txt文
- 本文实例为大家分享了Java实现猜数字游戏的具体代码,供大家参考,具体内容如下完成猜数字游戏需要实现以下几点:获得一个随机数作为“答案数”;
- TaskAwaiter先说一下 TaskAwaiter,TaskAwaiter 表示等待异步任务完成的对象并为结果提供参
- 本文实例讲述了Android实现手机振动设置的方法。分享给大家供大家参考。具体如下:main.xml布局文件:<?xml versio
- Android动态修改ToolBar的Menu菜单效果图实现实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,
- 1.引言在开发中,拖放是一种比较常见的手势操作,使用它能够让应用的交互更加地便捷和友好,本文将简要介绍如何为Android中的View添加拖
- 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用。1.背景自适应且不失真问题的存在制作自适应背景图
- static void Main(string[] args){ Process proc = null
- 直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownL
- 策略模式的应用场景策略模式是否要使用,取决于业务场景是否符合,有没有必要。是否符合如果业务是处于不同的场景时,采取不同的处理方式的话,就满足
- 前言我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中
- 可能经常看面经的同学都知道,面试所遇到的排序算法,快速排序占主要位置,热度只增不减啊,其次就是归并和堆排序。其实以前写过一篇排序的文章,写的
- 1、在当前窗口查找文本【Ctrl+F】F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置2、在当前工程内查找文