Cra*_*g W 5 .net c# comparison binary-search icomparer
我想使用List.BinarySearch()自定义项类型.自定义类型未实现IComparable<T>; 相反,我有几个静态Comparison<T>函数,我打电话,因为在不同的点我想按不同的标准对列表进行排序.另外,我认为它增加了清晰度,因为您的排序方式可以通过函数名称来描述.现在我想在列表上进行二进制搜索.我想使用我的一个比较函数,List.BinarySearch()但却发现它没有Comparison<T>只接受的重载IComparer<T>.我试图避免,IComparer<T>因为对于我来说,只是为了比较对象而有一个单独的类似乎很愚蠢.为什么不List.BinarySearch()有采取过载Comparison<T>,除了IComparer<T>?有没有办法使用我现有的Comparison<T>功能List.BinarySearch()?
Jon*_*eet 11
从MiscUtil创建IComparer<T>一个Comparison<T>- 这是一个(略微修改过的)类非常容易,欢迎使用它:
/// <summary>
/// Utility to build an IComparer implementation from a Comparison delegate,
/// and a static method to do the reverse.
/// </summary>
public class ComparisonComparer<T> : IComparer<T>
{
private readonly Comparison<T> comparison;
public ComparisonComparer(Comparison<T> comparison)
{
if (comparison == null)
{
throw new ArgumentNullException("comparison");
}
this.comparison = comparison;
}
public int Compare(T x, T y)
{
return comparison(x, y);
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以添加扩展方法来List<T>为您执行此操作:
public static int BinarySearch<T>(this List<T> list, Comparison<T> comparison)
{
return list.BinarySearch(new ComparisonComparer(comparison));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2687 次 |
| 最近记录: |