C# 对泛型列表进行排序和搜索
对泛型列表进行排序与对其他列表进行排序是一样的。这里唯一的区别在于,可使用泛型接口 IComparer和IComparable<T>,它们提供了略有区别的、针对特定类型的方法。下表列出了它们之间的区别。
泛型方法 | 非泛型方法 | 区 另IJ |
int IComparable<T> | int IComparable | 在泛型版本中楚强类型化的 |
•CompareTo(T otherObj) | .CompareTo(object otherObj} | |
bool IComparable<T> | N/A | 在非泛型接口中不存在,可以改用继 |
.Equals(T otherObj) | 承的object.Equals() |
泛型方法 | 非泛型方法 | 区 另IJ | |
int IComparer<T>.Compare (T objectA, T objectB) | int IComparer .Compare(object objectA, object objectB) | 在泛型版本中是强类型化的 | |
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>接口。另外,还可以提供泛型委托,作为排序方法。从了解代码工作原理的角度看,这非常有趣,因为实现上述接口并不比实现其非泛型版本更麻烦。
一般情况下,给列表排序需要有一个方法来比较两个T类型的对象。要在列表中搜索,只需要一个方法来检查T类型的对象,看它是否满足某个条件。定义这样的方法很简单,这里给出两个可以使用的泛型委托类型:
• Comparison<T>:这个委托类型用于排序方法,其返回类型和参数如下:
int method(T objectA, T objects)
• Predicated:这个委托类型用于搜索方法,其返回类型和参数如下:
bool method{T targetObject)
可以定义任意多个这样的方法,使用它们实现List<I>的搜索和排序方法。
点击加载更多评论>>