博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用List泛型,怎么排序

Posted on 2008-07-04 10:18  james.dong  阅读(769)  评论(0编辑  收藏  举报
   
  using   System;  
  
using   System.Collections.Generic;  
  
using   System.Text;  
   
  
namespace   Ch12Ex02  
  
{  
        
class   Program  
        
{  
              
static   void   Main(string[]   args)  
              
                       
                    
//Collection<Animal>   animalCollection   =   new   Collection<Animal>();  
                    List<Animal>   animalCollection   =   new   List<Animal>();  
                    animalCollection.Add(
new   Cow("Jack"));  
                    animalCollection.Add(
new   Chicken("Vera"));  
                    
//animalCollection.Sort();//此处编译错误,请问是怎么回事?  
                    foreach   (Animal   myAnimal   in   animalCollection)  
                    
{  
                          myAnimal.Feed();  
                    }
  
                    Console.ReadKey();  
              }
  
        }
  
  }
  
 
   原来用的animalCollection.Sort()这个是用的默认的比较器...  
  对于list<T>来说:  
  此方法使用类型   T   的默认比较器   Comparer.Default   确定列表元素的顺序。Comparer.Default   属性检查类型   T   是否实现了   IComparable   泛型接口,如果实现了该接口,则使用该实现。否则,Comparer.Default   将检查类型   T   是否实现了   IComparable   接口。如果类型   T   未实现任一接口,则   Comparer.Default   将引发   InvalidOperationException。  
   
  也就是说Animal没有实现IComparable   接口,它也不知道怎么帮你排啊?按照什么排啊?

对于范型来说必须指定比较器  
  可以这样做:  
  1.   让Animal实现IComparable接口,实现CompareTo方法(假设以name来排序):  
  class   Animal   :   IComparable<Animal>  
  {  
      ...  
      public   int   CompareTo(Animal   other)  
      {  
            return   name.CompareTo(other.name);  
      }  
  }  
  这样直接调用sort就可以排序   list.Sort();  
  2.自己写ICompare比较器:  
  class   AnimalCompare   :   IComparer<Animal>  
  {  
          public   int   Compare(Animal   a,   Animal   b)  
          {  
                  return   a.name.CompareTo(b.name);  
          }  
  }  
  这样使用   list.Sort(new   AnimalCompare());

也可以使用   SortedList<key,   value>    
  在Add元素的时候指定一个key,这样SortedList会自动以key的Compare方法进行排序  
  比如    
  SortedList<string,   Animal>   sl   =   new   SortedList<string,   Animal>();  
  sl.Add("animal1",   new   Animal());  
  sl.Add("animal2",   new Anmial());