您的位置:首页 > 其它

使用List泛型,怎么排序

2008-07-04 10:18 351 查看
   

  using   System;  

  using   System.Collections.Generic;  

  using   System.Text;  

   

  namespace   Ch12Ex02  

 

   原来用的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());

var alimama_pid="mm_10438718_507180_767205";
var alimama_titlecolor="0000FF";
var alimama_descolor ="000000";
var alimama_bgcolor="FFFFFF";
var alimama_bordercolor="E6E6E6";
var alimama_linkcolor="008000";
var alimama_bottomcolor="FFFFFF";
var alimama_anglesize="0";
var alimama_bgpic="0";
var alimama_icon="0";
var alimama_sizecode="14";
var alimama_width=728;
var alimama_height=90;
var alimama_type=2;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: