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

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

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

    對(duì)泛型列表進(jìn)行排序與對(duì)其他列表進(jìn)行排序是一樣的。這里唯一的區(qū)別在于,可使用泛型接口 IComparer和IComparable<T>,它們提供了略有區(qū)別的、針對(duì)特定類(lèi)型的方法。下表列出了它們之間的區(qū)別。

泛型方法

非泛型方法

區(qū) IJ

int IComparable<T>

int IComparable

在泛型版本中楚強(qiáng)類(lèi)型化的

?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)類(lèi)型化的

bool IComparer<T>.Equals

(T objectA, T objectB)

N/A

在非泛型接口中不存在,

承的object.Equals()

可以改用繼

int IComparer<T>

.GetHashCode(T objectA)

N/A

在非泛型接口中不存在,可以改用繼

承的object. GetHashCode ()

    要對(duì)List<T>排序,可以在翻辟的類(lèi)型上提供IComparable<T>接口,或者提供lComparer<T>接口。另外,還可以提供泛型委托,作為排序方法。從了解代碼工作原理的角度看,這非常有趣,因?yàn)閷?shí)現(xiàn)上述接口并不比實(shí)現(xiàn)其非泛型版本更麻煩。

    一般情況下,給列表排序需要有一個(gè)方法來(lái)比較兩個(gè)T類(lèi)型的對(duì)象。要在列表中搜索,只需要一個(gè)方法來(lái)檢查T(mén)類(lèi)型的對(duì)象,看它是否滿足某個(gè)條件。定義這樣的方法很簡(jiǎn)單,這里給出兩個(gè)可以使用的泛型委托類(lèi)型:

? Comparison<T>:這個(gè)委托類(lèi)型用于排序方法,其返回類(lèi)型和參數(shù)如下:

    int method(T objectA, T objects)

? Predicated:這個(gè)委托類(lèi)型用于搜索方法,其返回類(lèi)型和參數(shù)如下:

    bool method{T targetObject)

可以定義任意多個(gè)這樣的方法,使用它們實(shí)現(xiàn)List<I>的搜索和排序方法。


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

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