我正在尝试创建一个灵活的插入排序算法,它将记录对象属性(月,日和时间,主要是数字数据),所以我将Func委托作为参数传递给我的插入排序方法,这些当然我的属性是整数,但我也希望能够对数据执行相同的功能,例如可以表示的双精度数,幅度,纬度,经度等。
对于这个实例来说,方法重载似乎太冗长了,还有其他我可以用来实现这种灵活性的东西吗?
答案 0 :(得分:4)
听起来你只需要使它成为通用的,并限制类型进行比较:
public static void InsertionSort<T>(
RecordCollection records,
Func<SesmicRecord, T> propertySelector)
where T : IComparable<T>
然后在需要比较值时调用x.CompareTo(y)
。
或者您可以使用比较器:
public static void InsertionSort<T>(
RecordCollection records,
Func<SesmicRecord, T> propertySelector,
IComparer<T> comparer)
{
comparer = comparer ?? Comparer<T>.Default;
// Now use comparer.Compare(x, y) wherever you need to compare values
}
或者只是使用LINQ或现有的BCL类进行排序,除非真的需要因某种原因重新实现排序...
答案 1 :(得分:1)
将方法更改为以下签名:
public static void InsertionSort<T>(RecordCollection RecordCollection, Func<SesmicRecord, T> properyField)
where T: IComparable<T>
现在利用IComparable<T>
界面:t1.CompareTo(t2)
。