C#通过IComparable实现ListT.sort()排序
程序员文章站
2023-12-16 16:50:34
本文实例讲述了c#通过icomparable实现listt.sort()排序的方法,分享给大家供大家参考之用。具体方法如下:
通常来说,list.sor...
本文实例讲述了c#通过icomparable实现listt.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#程序设计有所帮助。