【发布时间】:2012-01-21 18:42:20
【问题描述】:
我试图了解如何实现 Jon Skeet 在线程中找到的代码: Doing a range lookup in C#?
有人可以提供使用以下内容的设置示例: 1-10000, 10001-40000, 40000+
第一组在哪里分别返回1、2、3的值?
我不太了解这段代码是如何完成的。发送。
public interface IRangeComparer<TRange, TValue>
{
/// <summary>
/// Returns 0 if value is in the specified range;
/// less than 0 if value is above the range;
/// greater than 0 if value is below the range.
/// </summary>
int Compare(TRange range, TValue value);
}
/// <summary>
/// See contract for Array.BinarySearch
/// </summary>
public static int BinarySearch<TRange, TValue>(IList<TRange> ranges,
TValue value,
IRangeComparer<TRange, TValue> comparer)
{
int min = 0;
int max = ranges.Count-1;
while (min <= max)
{
int mid = (min + max) / 2;
int comparison = comparer.Compare(ranges[mid], value);
if (comparison == 0)
{
return mid;
}
if (comparison < 0)
{
min = mid+1;
}
else if (comparison > 0)
{
max = mid-1;
}
}
return ~min;
}
【问题讨论】: