C# 中list的排序

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

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

 

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

类A的代码:

ExpandedBlockStart.gif 类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;
        }
    }

 

 

先定义排序规则:

ExpandedBlockStart.gif 代码:排序规则
         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);
        }

 

 

测试排序规则:

ExpandedBlockStart.gif 代码:测试排序
         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 算法。

 

详情可参考:http://msdn.microsoft.com/zh-cn/library/w56d4y5z(VS.80).aspx

转载于:https://www.cnblogs.com/liaozh/archive/2009/12/08/1619679.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值