程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 泛型--實現IComparable接口(2)

泛型--實現IComparable接口(2)

編輯:關於C語言

輸出結果:

4 5 6 5 7
108 100 101 103 103
4 5 5 6 7
100 101 103 103 108

輸出顯示整型數組和Employee數組產生的是隨機數。排序後,顯示的是已經進行排序後的值。

9.6.2 實現IComparer接口

當您在List中調用Sort(),默認的IComparer(譯者注:這裡可能是錯誤,應該為IComparable)實現被調用,它調用IComparable所實現的CompareTo()方法對List內的每個元素進行快速排序。

當您想控制排列方式時,可以自由地創建自己的IComparer實現。在下一個例子中,將在Employee中添加第二個字段:yearsOfSvc。您希望在List中按兩種字段empID或yearsOfSvc來對Employee對象進行排序。

為了達到這個目的,需要創建IComparer的實現,用於傳遞給List中Sort()方法的參數。這個IComparer類是EmployeeComparer,它讓Employee對象知道如何進行排序。

EmployeeComparer類有一個WhichComparison屬性,它是Employee. EmployeeComparer.ComparisonType類型:

public Employee.EmployeeComparer.ComparisonType WhichComparison
{
  get{return whichComparison;}
  set{whichComparison = value;}
}

ComparisonType是一個枚舉類型,它有兩個值:empID或yearsOfSvc(指示您希望按員工ID還是工齡進行排序):

public enum ComparisonType
{
  EmpID,
  YearsOfService
};

在調用Sort()方法之前,創建EmployeeComparer的實例並設置它的ComparisonType屬性:

Employee.EmployeeComparer c = Employee.GetComparer();

c.WhichComparison=Employee.EmployeeComparer.ComparisonType.EmpID;

empArray.Sort(c);

調用Sort()方法之時,List會調用EmployeeComparer中的Compare方法,並把當前要對比的字段通過WhickComparison屬性傳遞給Employee.CompareTo()方法:

public int Compare( Employee lhs, Employee rhs )
{
  return lhs.CompareTo( rhs, WhichComparison );
}

Employee對象必須實現一個自定義的CompareTo()方法,用於獲得比較方式並按照要求進行對比:

public int CompareTo(Employee rhs,
  Employee.EmployeeComparer.ComparisonType which)
{
  switch (which)
  {
   case Employee.EmployeeComparer.ComparisonType.EmpID:
     return this.empID.CompareTo(rhs.empID);
   case Employee.EmployeeComparer.ComparisonType.Yrs:
     return this.yearsOfSvc.CompareTo(rhs.yearsOfSvc);
  }
  return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved