2008年8月20日 星期三

自訂類別的陣列排序

我們都知道用intlong等基本形態所建立的一維陣列可以使用Array.Sort()來做排序的動作
今天我們建立了一個如下的類別:
public class People
{
  private int age = 0;
  private string name = string.Empty;
  public int Age
  {
   get { return age; }
   set
   {
    if ( age >= 0 )
     age = value;
   }
  }
  public string Name
  {
   get { return name; }
   set { name = value; }
  }
}
如果我們希望能夠使用Array.Sort()來排序此資料形態的陣列
ex:
People[] peoples = new People[5];
Array.Sort(peoples);

此時會出現 "無法比較陣列中的兩個元素。" 的例外
因為我們並沒有指定要排序的條件
例如是照age或是name來排序
因此我們必須讓People類別實做 System.IComparable 介面
實作後的類別如下:
public class People:System.IComparablePeople
{
  //內容完全與前面相同,在此省略

  #region IComparable<People> 成員

  
//多實做了此方法
  int IComparable
People.CompareTo(People other)
  {
   return this.
Age.CompareTo(other.Age); //這裡我們選擇以Age做為排序為基準
  }

  #endregion
}

沒有留言:

張貼留言