C# 中list的排序

将list中的元素按照某种规则排序是件很平常的事,今天在网上搜了下,竟然没有好的解决方法。

后来发现list本身含sort方法,并支持自定义排序规则。

 

现有类A,含三个属性,分别是NO,AGE,NAME,现在要求按照这个顺序排序(既先比较NO,如果相同比较AGE,如果AGE相同就比较NAME)。

类A的代码:

类A
class  A
    {
         private   string  _name;
         public   string  NAME
        {
             get  {  return  _name; }
             set  { _name  =  value; }
        }

         private   int  _age;
         public   int  AGE
        {
             get  {  return  _age; }
             set  { _age  =  value; }
        }

         private   int  _no;
         public   int  NO
        {
             get  {  return  _no; }
             set  { _no  =  value; }
        }

         public  A( int  no,  int  age,  string  name)
        {
             this .NO  =  no;
             this .AGE  =  age;
             this .NAME  =  name;
        }
    }

 

 

先定义排序规则:

代码:排序规则
         private   static   int  SortA(A a1, A a2)
        {
             if  (a1.NO.CompareTo(a2.NO)  !=   0 )
                 return  a1.NO.CompareTo(a2.NO);
             else   if  (a1.AGE.CompareTo(a2.AGE)  !=   0 )
                 return  a1.AGE.CompareTo(a2.AGE);
             else
                 return  a1.NAME.CompareTo(a2.NAME);
        }

 

 

测试排序规则:

代码:测试排序
         static   void  Main( string [] args)
        {
            List < A >  list  =   new  List < A > ();
            list.Add( new  A( 20 ,  20 ,  " 00001 " ));
            list.Add( new  A( 18 ,  50 ,  " 00003 " ));
            list.Add( new  A( 20 ,  19 ,  " 00004 " ));
            list.Add( new  A( 21 ,  21 ,  " 00005 " ));
            list.Add( new  A( 19 ,  19 ,  " 00006 " ));
            list.Add( new  A( 99 ,  19 ,  " 00007 " ));
            list.Add( new  A( 19 ,  19 ,  " 00008 " ));
            list.Add( new  A( 38 ,  50 ,  " 00009 " ));

            list.Sort(SortA);

             foreach  (A a  in  list)
            {
                Console.WriteLine(a.NO  +   "   "   +  a.AGE  +   "   "   +  a.NAME);
            }

            Console.ReadLine();
        }

 

 

输出结果正常,证明方法有效.

 

注意,上面测试代码调用很简单,就是list.Sort(SortA); 就可以了。

其实这是用委托表示的方法对 List 的元素进行排序。内部实现则为QuickSort 算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值