熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

對象數組根據某屬性列的靈活排序

2013-11-15 12:48:09  來源: ASP編程 

  在工作中經常會遇到對象數組根據某個屬性進行排序的問題這裡介紹一個方法
  以汽車為例 public class Car: {
   private int weight;

  public int Weight
   {
   get { return weight; }
   set { weight = value; }
   }
   private string type;

  public string Type
   {
   get { return type; }
   set { type = value; }
   }
   }
  Car[] cars現在需要排序首先我們想根據Weight進行排序大家自然會想到冒泡算法不過這個肯定不是最好的這裡提供一個簡便的方法

  我們將類Car實現接口IComparable使其能夠使用ArraySort()
  代碼如下

  public class Car:IComparable<Car>
   {
   private int weight;

  public int Weight
   {
   get { return weight; }
   set { weight = value; }
   }
   private string type;

  public string Type
   {
   get { return type; }
   set { type = value; }
   }

  IComparable 成員#region IComparable<Employee> 成員

  public int CompareTo(Car other)
   {
   if (thisweight == otherweight)
   return ;
   if (thisweight > otherweight)
   return ;
   return ;
   }

  #endregion
   }實現該方法以後我們就可以直接使用如下代碼來對cars進行排序了
   Car[] arr = new Car[] {carcarcar };
   ArraySort<Car>(arr);但是隨著項目的發展的發展我們會迎來新的問題我們現在又需要根據Type排序了怎麼辦呢?
  不用擔心我們只要使用一個最簡單的Adapter模式就能解決這個問題
  下面我們來創建這個適配器
   public class ComparaCarAdapter : IComparer<Car>
   {

  IComparer 成員#region IComparer<Car> 成員

  public int Compare(Car x Car y)
   {
   return xTypeCompareTo(yType);
   }

  #endregion
   }然後如此調用
  ArraySort<Car>(arrnew ComparaCarAdapter());但是這樣如果屬性很多會產生很多的類怎麼辦呢那麼利用反射吧將ComparaCarAdapter改造為
   public class ComparaCarAdapter : IComparer<Car>
   {
   string _progName = ;
   public ComparaCarAdapter(string progName)
   {
   _progName = progName;
   }
   IComparer 成員#region IComparer<Employee> 成員

  public int Compare(Car x Car y)
   {
   Type t = typeof(Car);
   PropertyInfo pi = tGetProperty(_progName);
   object xvalue = piGetValue(x null);
   object yvalue = piGetValue(y null);
   if (xvalue is string)
   {
   return ((string)xvalue)CompareTo((string)yvalue);
   }
   else
   {
   if (xvalue is int)
   return ((int)xvalue)CompareTo((int)yvalue);
   }
   throw new NotSupportedException();
   }

  #endregion
   }
  調用 ArraySort<Car>(arr new ComparaCarAdapter(Weight));OK搞定應該足夠靈活了吧


From:http://tw.wingwit.com/Article/program/ASP/201311/21665.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.