C#基础教程之IComparable用法,实现List<T>.sort()排序
list<t>.sort()可以实现对t的排序,比如list<int>.sort()执行后集合会按照int从小到大排序。如果t是一个自定义的object,可是我们想按照自己的方式来排序,那该怎么办呢,其实可以用过icomparable接口重写compareto方法来实现。流程如下:
一.第一步我们申明一个类person但是要继承icomparable接口:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace testicomparable
{
public class person : icomparable<person>
{
public string name { get; set; }
public int age { get; set; }
public int compareto(person obj)
{
int result;
if (this.name == obj.name && this.age == obj.age)
{
result = 0;
}
else
{
if (this.name.compareto(obj.name) > 0)
{
result = 1;
}
else if (this.name == obj.name && this.age > obj.age)
{
result = 1;
}
else
{
result = -1;
}
}
return result;
}
public override string tostring()
{
return this.name + "-" + this.age;
}
}
}
二.然后在主函数里面调用sort方法即可.类就会按照姓名从小到大,如果姓名相同则按照年龄从小到大排序了。
public class program
{
public static void main(string[] args)
{
list<person> lstperson = new list<person>();
lstperson.add(new person(){ name="bob",age=19});
lstperson.add(new person(){ name="mary",age=18});
lstperson.add(new person() { name = "mary", age = 17 });
lstperson.add(new person(){ name="lily",age=20});
lstperson.sort();
console.readkey();
}
}
三,如果不继承icomparable接口,我们该如何实现排序呢。可以使用linq来实现。其实效果是一样的,只是如果类的集合要经常排序的话,建议使用继承接口的方法,这样可以简化sort的代码,而且更容易让人看懂。
public static void main(string[] args)
{
list<person> lstperson = new list<person>();
lstperson.add(new person(){ name="bob",age=19});
lstperson.add(new person(){ name="mary",age=18});
lstperson.add(new person() { name = "mary", age = 17 });
lstperson.add(new person(){ name="lily",age=20});
lstperson.sort((x,y) =>
{
int result;
if (x.name == y.name && x.age == y.age)
{
result = 0;
}
else
{
if (x.name.compareto(y.name) > 0)
{
result = 1;
}
else if (x.name == y.name && x.age > y.age)
{
result = 1;
}
else
{
result = -1;
}
}
return result;
});
console.readkey();
}
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
C#实现猜数字游戏
本文实例为大家分享了c#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100之间的随机数字,并且...
[阅读全文]
-
-
C# 可空类型的具体使用
在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空...
[阅读全文]
-
-
-
C#实现猜数字小游戏
本文实例为大家分享了c#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using system;using system.collecti...
[阅读全文]
-
-
C#实现简单俄罗斯方块
最近在看《.net游戏编程入门经典 c#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪念。1.类的设计在充...
[阅读全文]
-
网友评论