c#二进制搜索,不同的对象类型
本文关键字:对象 类型 二进制 搜索 | 更新日期: 2023-09-27 18:05:23
我正在用c#制作一款小游戏。在其中,我有关键帧对象,每个对象都有一个特定的时间,它们出现在一个排序列表中。我希望找到发生在特定时间之后的那个。如果不创建一个新的关键帧对象,然后在列表中搜索该对象,查看结果,然后使用该对象,是否存在一种语法上整洁的方法来执行搜索?
例如:double time = 10.0;
Keyframe blah = new Keyframe(time);
int index = _keyframes.BinarySearch(null, blah);
if (index < 0) index = ~index;
if (index >= _keyframes.Length) return null;
return _keyframes[index];
工作,但涉及到创建一个新的关键帧对象。
谁有一个简洁的方法来做到这一点?
您需要实现自己的方法来做到这一点。如下所示:
public static class Extensions
{
public static TList BinaryFind<TList>(this IList<TList> list, Func<TList, int> comparer)
{
if (!list.Any())
return default(TList);
int pivot = list.Count()/2;
TList pivotVal = list[pivot];
int conditionResult = condition(pivotVal);
if (conditionResult == 0)
return pivotVal;
else
{
if (conditionResult < 0)
return BinaryFind<TList, TSearchArg>(list.Take(pivot).ToList(), condition);
else
return BinaryFind<TList, TSearchArg>(list.Skip(pivot).ToList(), condition);
}
}
}
那么你可以用
Keyframe result = _keyframes.BinaryFind(k => Double.Compare(k.Time, time));
没有办法进入。net实现,BinarySearch需要你传递一个对象来搜索,或者写一个你自己的实现