首页 > 代码库 > C#基础---IComparable用法,实现List<T>.sort()排序

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#基础---IComparable用法,实现List<T>.sort()排序