c#之IComparable<T>接口、IComparer<T>接口及Comparison<T>委托应用于集合排序

C#中的集合类常常需要排序,集合类的Sort方法是常用方法。

比如 List<T> list=...,需要对list进行排序,可以用list.Sort()方法。该方法有多个重载。

(1) IComparable<in T>接口   

即  public interface IComparable<in T>

{

    int CompareTo(T other);

}

当某对象实现了该接口,则表示该对象是可排序的。

 

(2)IComparer<T>接口

表示排序器。对于没有实现Comparable<T>接口的对象,可以为其创建实现IComparer<T>接口的排序器,用于排序。录入,可以为Sort传入IComparer<T>的实现类的实例对象,该接口为:

public interface IComparer<in T>
{

    //如果x小于y,则返回负数;x大于y,返回正数;等于则返回0
    int Compare(T x, T y); 

}

void Sort(IComparer<T> comparison);

如果使用IComparer<T>实现类的实例对象,则需要实现定义好实现类,对于已经定义好的,则比较方便,否则相对麻烦一些。

 

(3)Comparison<T>委托

但是对于没有定义IComparer<T>的实现类的场合,可以使用更为方便的方式,即使用Comparison<T>委托作为参数。

public delegate int Comparison<in T>(T x, T y);

void Sort(Comparison<T> comparison);

具体使用时,可以直接传入委托(或函数名称),也可以直接使用numda表达式。以下是使用numda表达式的方法代码:

List<Student> list=new List<Student>();  //Student类中含有Age属性
list.AddRange(....);  //添加数据 

//以下对Student集合按照其Age属性从小到大排序
list.Sort( (x, y) =>
                    {
                        if (x.Age < y.Age)
                        {
                            return -1;
                        }
                        else if (x.Age > y.Age)
                        {
                            return 1;
                        }
                        else
                            return 0;
                    }
                    );    

或者以下更加简单的写法********:
list.sort((x,y)=>x.Age.CompareTo(y.Age));   

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值