位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 對泛型列表進(jìn)行排序和搜索

提問人:劉團(tuán)圓發(fā)布時間:2020-12-08

    對泛型列表進(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>接口。另外,還可以提供泛型委托,作為排序方法。從了解代碼工作原理的角度看,這非常有趣,因?yàn)閷?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>的搜索和排序方法。


繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部