码迷,mamicode.com
首页 > 编程语言 > 详细

对象的比较与排序:IComparable和IComparer接口

时间:2015-09-10 23:51:04      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:

IComparable和ICompare 接口是.net framework 中比较对象的标准方式,这两个接口提供一个返回值类似(大于0 等于0 小于0)的比较方法,二者区别如下:
1. IComparable 在要比较的对象的类中实现,可以比较该对象和另一个对象。
2. IComparer 在一个单独的类中实现,可以比较任意两个对象。
 
先看 IComparable  这个接口方法是 int CompareTo(object obj); 方法只有一个参数,我们知道比较至少要有两个对象,所以这个方法只能应用在要比较的对象类中,参数传递的对象就可以和 this 做比较。
class obj : IComparable<obj>
{
    public int age = 10;

    public int CompareTo(obj other)
    {
        //return this.age.CompareTo(other.age); 
        //下面代码是此方法的具体实现 

        if (this.age == other.age)
        {
            return 0;
        }
        else if (this.age > other.age)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }
}

static void Main(string[] args)
{
    obj a = new obj();
    obj b = new obj();

    a.CompareTo(b); // 0

    a.age = 20;
    a.CompareTo(b); // 1

    a.age = 5;
    a.CompareTo(b); // -1
}
接口IComparable主要是实现类对象间的比较规则。 再看IComparer 这个接口提供一个需要两个参数的方法,这个参数也再做比较运算,但是比较主要是为了为对象做排序而非为给类增加比较运算。
class obj { public int age = 10; } class objcomp : IComparer<obj> { public int Compare(obj x, obj y) { //return x.age.CompareTo(y.age); //下面代码是此方法的具体实现 if (x.age == y.age) { return 0; } else if (x.age > y.age) { return 1; } else { return -1; } } } static void Main(string[] args) { List<obj> list = new List<obj>(); list.Add(new obj() { age = 50 }); list.Add(new obj() { age = 20 }); list.Add(new obj() { age = 40 }); // 列表中元素原始顺序(按照age)50,20,40 list.Sort(new objcomp()); // public void Sort(IComparer<T> comparer);调用了Sort方法的重载版本 // 经过排序列表中元素顺序(按照age)20,40,50 } 当然了,如果你想更改排序规则按照降序排列可以交换 objcomp 中方法参数的 age 值大于和小于时的返回值。

 

对象的比较与排序:IComparable和IComparer接口

标签:

原文地址:http://www.cnblogs.com/wangjx/p/4799360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!