C# 對泛型列表進(jìn)行排序和搜索
對泛型列表進(jìn)行排序與對其他列表進(jìn)行排序是一樣的。這里唯一的區(qū)別在于,可使用泛型接口 IComparer和IComparable<T>,它們提供了略有區(qū)別的、針對特定類型的方法。下表列出了它們之間的區(qū)別。
泛型方法 | 非泛型方法 | 區(qū) 另IJ |
int IComparable<T> | int IComparable | 在泛型版本中楚強(qiáng)類型化的 |
?CompareTo(T otherObj) | .CompareTo(object otherObj} | |
bool IComparable<T> | N/A | 在非泛型接口中不存在,可以改用繼 |
.Equals(T otherObj) | 承的object.Equals() |
泛型方法 | 非泛型方法 | 區(qū) 另IJ | |
int IComparer<T>.Compare (T objectA, T objectB) | int IComparer .Compare(object objectA, object objectB) | 在泛型版本中是強(qiáng)類型化的 | |
bool IComparer<T>.Equals (T objectA, T objectB) | N/A | 在非泛型接口中不存在, 承的object.Equals() | 可以改用繼 |
int IComparer<T> .GetHashCode(T objectA) | N/A | 在非泛型接口中不存在,可以改用繼 承的object. GetHashCode () |
要對List<T>排序,可以在翻辟的類型上提供IComparable<T>接口,或者提供lComparer<T>接口。另外,還可以提供泛型委托,作為排序方法。從了解代碼工作原理的角度看,這非常有趣,因為實(shí)現(xiàn)上述接口并不比實(shí)現(xiàn)其非泛型版本更麻煩。
一般情況下,給列表排序需要有一個方法來比較兩個T類型的對象。要在列表中搜索,只需要一個方法來檢查T類型的對象,看它是否滿足某個條件。定義這樣的方法很簡單,這里給出兩個可以使用的泛型委托類型:
? Comparison<T>:這個委托類型用于排序方法,其返回類型和參數(shù)如下:
int method(T objectA, T objects)
? Predicated:這個委托類型用于搜索方法,其返回類型和參數(shù)如下:
bool method{T targetObject)
可以定義任意多個這樣的方法,使用它們實(shí)現(xiàn)List<I>的搜索和排序方法。
點(diǎn)擊加載更多評論>>