我正在用C#做一个小游戏。在其中,我在一个排序列表中有Keyframe对象,每个对象都有一个特定的时间。我希望找到在特定时间之后发生的那个。在没有创建新的关键帧对象的情况下,然后在列表中搜索该对象,结果然后使用该对象,是否存在语法 neat 方式来执行搜索?
例如:
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];
工作但涉及创建新的Keyframe对象。
任何人都有简洁的方法来做到这一点?
答案 0 :(得分:0)
No。进入.net实现,BinarySearch要求你传递一个对象进行搜索,要么写一个你自己的实现。
答案 1 :(得分:0)
您需要实现自己的方法来执行此操作。如下所示:
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));