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 ;
if (x == null) return -;
if (y == null) return ; //TODO:Person类实例X与Y的比较规则
//按姓名由小到大排列,姓名相同的人年龄大的在前
{
int temp = string.Compare(x.Name, y.Name);
if (temp > ) return -;
else if (temp < ) return ; if (x.Age > y.Age) return ;
if (x.Age < y.Age) return -;
} return ;
}
}
3)Main函数,建立一个List,并使用刚建立的PersonComparer类中的规则对List进行排序
static void Main(string[] args)
{
List<Person> a = new List<Person>(); a.Add(new Person() { Name = "Tsybius", Age = });
a.Add(new Person() { Name = "Galatea", Age = });
a.Add(new Person() { Name = "Lucius", Age = });
a.Add(new Person() { Name = "Septimus", Age = });
a.Add(new Person() { Name = "Octavius", Age = });
a.Add(new Person() { Name = "Lucius", Age = }); //输出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# 使用IComparer自定义List类的排序方案的更多相关文章
- C#学习笔记(14)——C# 使用IComparer自定义List类的排序方案
说明(2017-7-17 21:34:59): 原文:https://my.oschina.net/Tsybius2014/blog/298702?p=1 另一篇比较好的:https://wenku. ...
- java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义
package com.swift; import java.util.Arrays; import java.util.Comparator; public class ArrayThread_Te ...
- 关于MapReduce中自定义分区类(四)
MapTask类 在MapTask类中找到run函数 if(useNewApi){ runNewMapper(job, splitMetaInfo, umbilical, reporter ...
- iOS探索:对NSArray中自定义的对象进行排序
http://mobile.51cto.com/hot-434804.htm 我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天 ...
- [转]掌握 ASP.NET 之路:自定义实体类简介 --自定义实体类和DataSet的比较
转自: http://www.microsoft.com/china/msdn/library/webservices/asp.net/CustEntCls.mspx?mfr=true 发布日期 : ...
- 《java入门第一季》之TreeSet存储自定义对象并保证排序和唯一
上一篇用一个简单的例子,介绍了treeset集合存储的内部过程,这里再完善其存储自定义对象保证唯一. 需求:A: * 自然排序,按照年龄从小到大排序 * B: * 成员变量值都相 ...
- 当我们用自定义的类对象作为key时,我们必须在程序中覆盖HashCode()和equals()。
Key值既然可以作为对象,那么也可以用一个自定义的类.比如: m.put(new sutdent(“Liucy”,30),”boss”) 如果没有语句来判定Student类对象是否相同,则会全部打印出 ...
- DRF JWT的用法 & Django的自定义认证类 & DRF 缓存
JWT 相关信息可参考: https://www.jianshu.com/p/576dbf44b2ae DRF JWT 的使用方法: 1. 安装 DRF JWT # pip install djang ...
- PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)
前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...
随机推荐
- 在Web Api中集成protobuf
安装WebApiContrib.Formatting.ProtoBuf Install-Package WebApiContrib.Formatting.ProtoBuf 注册ProtoBufForm ...
- appium for iOS config
appium-doctor: Running iOS Checks ✔ Xcode is installed at /Applications/Xcode.app/Contents/Developer ...
- 解决上一篇jquery中on的疑惑
内容都是来自:http://www.365mini.com/page/jquery-on.htm.这里做一下收藏.文章的最后 疑问和解答可以解决所有的疑惑 看了之后能更好的整篇文章. on()函数 ...
- 解决绝对定位div position: absolute 后面的<a> Link不能点击
今天布局的时候,遇到一个bug,当DIV设置为绝对定位时,这个div后面的相对定位的层里面的<a>Link标签无法点击. 网上的解决方案是在绝对定位层里面添加:pointer-events ...
- android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
<activity android:name="xxxActivity" android:configChanges="keyboard|keyboardHidde ...
- Windows下用tree命令生成目录树
有时候我们想为某个目录制作一个文档结构图,在Windows上,我们知道是使用tree命令. 但是,默认情况下tree只显示子目录名,而不显示子目录里的文件名,需要加上/F参数才能显示完整的文件名. ...
- 解决select2在bootstrap的modal中默认不显示的问题
在Bootstrap中的Modal,select2插件会有不显示,因为其z-index小于modal,还有另外一个问题是,修正z-index之后,select2不会自动失去焦点的问题.代码解决如下: ...
- [Tool]使用ConfuserEx混淆代码
为了防止程序发布后被一些"坏人"破解,开发者通常会对自己的代码进行混淆.这篇博客将介绍一款使用很广,并且混淆效果也不错的工具ConfuserEx. 新建一个C# 控制台程序,Hel ...
- SQL谜题(楼层谜题)
Multiple DwellingsBaker, Cooper, Fletcher, Miller and Smith live on different floors of an apartment ...
- android_studio上传svn的时候那些不提交
buid文件夹不需要提交