gpt4 book ai didi

C# 二进制搜索,不同的对象类型

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:50 25 4
gpt4 key购买 nike

我正在用 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));

关于C# 二进制搜索,不同的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com