李晓亮的博客

导航

关于ArrayList的排序

1.微软的例子
代码
using System;
using System.Collections;

public class SamplesArrayList  {
 
   
public class myReverserClass : IComparer  {

      
// Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          
return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }

   }

   
public static void Main()  {
 
      
// Creates and initializes a new ArrayList.
      ArrayList myAL = new ArrayList();
      myAL.Add( 
"The" );
      myAL.Add( 
"quick" );
      myAL.Add( 
"brown" );
      myAL.Add( 
"fox" );
      myAL.Add( 
"jumps" );
      myAL.Add( 
"over" );
      myAL.Add( 
"the" );
      myAL.Add( 
"lazy" );
      myAL.Add( 
"dog" );
 
      
// Displays the values of the ArrayList.
      Console.WriteLine( "The ArrayList initially contains the following values:" );
      PrintIndexAndValues( myAL );
 
      
// Sorts the values of the ArrayList using the default comparer.
      myAL.Sort();
      Console.WriteLine( 
"After sorting with the default comparer:" );
      PrintIndexAndValues( myAL );

      
// Sorts the values of the ArrayList using the reverse case-insensitive comparer.
      IComparer myComparer = new myReverserClass();
      myAL.Sort( myComparer );
      Console.WriteLine( 
"After sorting with the reverse case-insensitive comparer:" );
      PrintIndexAndValues( myAL );

   }
 
   
public static void PrintIndexAndValues( IEnumerable myList )  {
      
int i = 0;
      
foreach ( Object obj in myList )
         Console.WriteLine( 
"\t[{0}]:\t{1}", i++, obj );
      Console.WriteLine();
   }

}

 

2.修改自网上的例子
代码
using System;
using System.Collections;

class Employee{
   
public string name;
   
public int age;
   
public string sex;
   
public string id;
}

class EmployeeCompareAge:System.Collections.IComparer {
   
public int Compare(object x,object y)
   {
      
return ((Employee)x).age-((Employee)y).age;
   }
}

class EmployeeCompareId:System.Collections.IComparer {
   
public int Compare(object x,object y)
   {
      
string strSortX=(x as Employee).id;
      
string strSortY=(y as Employee).id;
      
      strSortX
=strSortX.Substring(strSortX.Length-3);
      strSortY
=strSortY.Substring(strSortY.Length-3);

      
//Console.WriteLine(strSortX);
      
//Console.WriteLine(strSortY);

      
return strSortX.CompareTo(strSortY);
   }
}

class Example
{
    
public static void Main()
    {
        Employee ep1
=new Employee();
        ep1.name
="小白";
        ep1.age
=21;
        ep1.sex
="";
        ep1.id
="M003";
        
        Employee ep2
=new Employee();
        ep2.name
="小黑";
        ep2.age
=43;
        ep2.sex
="";
        ep2.id
="M001";
        
        Employee ep3
=new Employee();
        ep3.name
="小红";
        ep3.age
=18;
        ep3.sex
="";
        ep3.id
="F002";

        ArrayList EmployeeList
=new ArrayList();
        EmployeeList.Add(ep1);
        EmployeeList.Add(ep2);
        EmployeeList.Add(ep3);

        
//按年龄排序
        EmployeeCompareAge EmployeeCmpAge=new EmployeeCompareAge();
        EmployeeList.Sort(EmployeeCmpAge);
        PrintIndexAndValues(EmployeeList);

        
//按编号后三位排序
        EmployeeCompareId EmployeeCmpId=new EmployeeCompareId();
        EmployeeList.Sort(EmployeeCmpId);
        PrintIndexAndValues(EmployeeList);
        
//Console.WriteLine();
    }

    
public static void PrintIndexAndValues(IEnumerable myList)  {
      
int i = 0;
      Console.WriteLine(
"=====================");
      
foreach (Object obj in myList)
         Console.WriteLine( 
"\t[{0}]:\t{1}", i++, (obj as Employee).name );      
   }
}

 



posted on 2010-12-28 00:05  LeeXiaoLiang  阅读(167)  评论(0)    收藏  举报