在我的Unity3d应用程序中,我需要检测用户选择的折线。确定方法是为每个GameObject(折线)添加一个碰撞器组件,这样我就知道每当用户点击一条折线时。但是,这样做效率非常低,因为我将有数千条折线。
因此,我更有效的方法是将每条折线从点(0,0,0)的距离存储在一个
我的问题是:在我重新发明轮子之前,是否有一个C#.NET类来执行“上界”二分查找算法、元素排序等?我知道有一个List(T).BinarySearch()方法,但是我需要确保List被正确地排序吗?如果我的列表没有排序,而该方法需要对列表进行排序,则可能效率很低。
因此,我更有效的方法是将每条折线从点(0,0,0)的距离存储在一个
List <KeyValuePair<double,GameObject>>
中。这个列表将按最低到最高的距离排序。当用户在游戏中选择一个点时,我将确定这个点距离(0,0,0)的距离(D),然后使用“上界”二分查找
来找到最接近该点的折线(即与(0,0,0)的距离类似的折线)。我的问题是:在我重新发明轮子之前,是否有一个C#.NET类来执行“上界”二分查找算法、元素排序等?我知道有一个List(T).BinarySearch()方法,但是我需要确保List被正确地排序吗?如果我的列表没有排序,而该方法需要对列表进行排序,则可能效率很低。
SortedList<TKey, TValue>
/SortedDictionary<TKey, TValue>
吗?来自 MSDN 的描述:'SortedList<TKey, TValue> 泛型类是一个具有 O(log n) 检索的键值对数组。' 不过请注意,只能插入唯一的键。 - Caramiriel