【转载】C#中自定义Sort的排序规则IComparable接口
C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需要将对应的实体继承IComparable接口来实现。
MSDN上给IComparable接口的定义为:定义由值类型或类实现的特定于类型的通用比较方法,旨在对其实例进行排序,使自建类的数组可以使用Array. Sort方法进行排序。自建类继承IComparable接口后,必须实现CompareTo方法,该方法参数是一个T类型的对象,返回值必须是-1,0,1中之一。
下面以一个例子来讲解这个自定义排序,我们定义一个Person人员类,该类包含Name和Age两个属性,要求在数组中调用Sort()方法排序的时候,按年龄Age属性从小到大排序,相应的实现如下代码所示:
class Person : IComparable
{
public Person(string name, int age)
{
Name = name; Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
public int CompareTo(object obj) //实现该比较方法即可
{
if (obj is Person)
{
Person p = obj as Person;
return this.Age.CompareTo(p.Age);
}
else
{
throw new ArgumentException("Object to compare to is not a Person object");
}
}
}
然后我们写个控制台程序测试下上述的排序结果,测试程序如下:
static void Main(string[] args)
{
List<Person> personlist = new List<Person>();
personlist.Add(new Person("马六",));
personlist.Add(new Person("张三",));
personlist.Add(new Person("李四",));
personlist.Add(new Person("王五", ));
personlist.Sort();
foreach(Person p in personlist)
{
Console.Write("姓名:"+p.Name+" 年龄:"+p.Age);
Console.Write("\n"); }
Console.ReadKey();
}
运行之后,我们查看下输出的结果信息,完美的达到了我们预期的效果,输出的结果如下:
姓名:李四 年龄:
姓名:张三 年龄:
姓名:马六 年龄:
姓名:王五 年龄:
扩展阅读:目前国内主流的云服务器厂商有哪些_IT技术小趣屋。
备注:原文转载自C#中自定义Sort的排序规则IComparable接口_IT技术小趣屋。
博主个人技术交流群:960640092,博主微信公众号如下:
【转载】C#中自定义Sort的排序规则IComparable接口的更多相关文章
- SQLite 自定义函数,聚合,排序规则
SQLite 自定义函数,聚合,排序规则 1.使用自定义函数, 聚合以及排序规则的基本方法是使用回调函数.这些注册的函数的生命周期只存在于应用程序中, 并不存储在数据库文件中, 因此需要在每个连接建立 ...
- [转载]Linux中的网络接口及LO回环接口
转自:https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10: ...
- 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析
一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...
- C++ Vector 中自定义对象的排序
需求: 客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如lv来进行排序. 数据存储: 每个联盟数据是一个对象,所有的联盟列表存在一个vector容器里面. 老的解决方法: 冒泡排序方法算法 新 ...
- javaScript中自定义sort中的比较函数,用于比较字符串长度,数值大小
, 1.2, 'bb', 'cc']; var len = arr.length; // for (var i = 0; i < len; i++) { // alert(arr + &qu ...
- Element-ui中自定义表单校验规则
先看一个场景图: 给一个标签el-tag添加表单的校验,且在内容有了以后关闭校验 看代码: <el-form-item class="baseinfo-tags" label ...
- Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?
在<第8.23节 Python中使用sort/sorted排序与"富比较"方法的关系分析>中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用 ...
- SqlServer nvarchar中的中文字符匹配,更改SqlServer实例和数据库排序规则的办法
我们都知道在SqlServer中的nvarchar类型可以完美的存储诸如中文这种unicode字符,但是我们会发现有时候查询语句去查询nvarchar列的时候查不出来. 为什么nvarchar类型有时 ...
- SQL Server 与MySQL中排序规则与字符集相关知识的一点总结
字符集&&排序规则 字符集是针对不同语言的字符编码的集合,比如UTF-8字符集,GBK字符集,GB2312字符集等等,不同的字符集使用不同的规则给字符进行编码排序规则则是在特定字符集的 ...
随机推荐
- Linux SVN服务器的搭建配置及分支的创建与合并
第一步:通过yum命令安装svnserve,命令如下: >yum -y install subversion 若需查看svn安装位置,可以用以下命令: >rpm -ql subversio ...
- 用万能马甲免费看VIP电影
什么是:万能马甲? 它浏览器的一个扩展程序插件,安装后能看一些热门网址的VIP特权,免费观看付费电影等. 使用过程: 1. 访问网址:http://www.wndd123.com/ 点击免费看电影时提 ...
- C语言表达式和语句
一.表达式 在C语言中,常量.变量.函数调用以及按C语言语法规则用运算符把运算数连接起来的式子都是合法的表达式 . 最后一类可以理解为运算符和运算对象的组合.例如: 算术表达式 = 算术运算符 + 运 ...
- [LeetCode] Magic Squares In Grid 网格中的神奇正方形
A 3 x 3 magic square is a 3 x 3 grid filled with distinct numbers from 1 to 9 such that each row, co ...
- 【数据结构】红黑树与跳表-(SortSet)-(TreeMap)-(TreeSet)
SortSet 有序的Set,其实在Java中TreeSet是SortSet的唯一实现类,内部通过TreeMap实现的:而TreeMap是通过红黑树实现的:而在Redis中是通过跳表实现的: Skip ...
- vue+mescroll=VScrollFull
VScrollFull 介绍 这个组件是什么? 是为了方便的使用下拉刷新,上拉加载而去封装的一个依赖于 mescroll.js 的 vue 组件(未发布,文末代码~) 封装这个组件使用了什么? mes ...
- 微软跨平台ORM框架之EFCore
EFCore是微软推出的跨平台ORM框架,想较于EF6.X版本,更加轻量级.EFCore目前已经更新到2.x. 接下来用CodeFirst的方式来使用EFCore. 1.创建控制台程序 2.引入EFC ...
- [Swift]LeetCode275. H指数 II | H-Index II
Given an array of citations sorted in ascending order (each citation is a non-negative integer) of a ...
- [Swift]LeetCode367. 有效的完全平方数 | Valid Perfect Square
Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...
- (转)iOS学习——UIlabel设置行间距和字间距
在iOS开发中经常会用到UIlabel来展示一些文字性的内容,但是默认的文字排版会觉得有些挤,为了更美观也更易于阅读我们可以通过某些方法将UIlabel的行间距和字间距按照需要调节. 比如一个Labe ...