我有一个在3d空间中创建对象实例的算法,为了避免双重放置,我必须为每个实例循环遍历所有实例,以找出实例是否具有与现有实例相同的id。
我的梦想解决方案是一个三维数组,我可以通过x y z坐标参考。 但是我猜这是不可能的,因为公羊的限制。
所以我想知道是否有类似“破碎”的数组,我仍然可以通过Array [x] [y] [z]引用,但工作就像一个列表,所以如果那个特定的xyz从未被声明,那么只是不存在,因此不会填满公羊。
如果有人能够指出我正在寻找的方向,甚至提供一些如何实现它的代码示例,我将非常感激。
答案 0 :(得分:3)
您是否考虑过Dictionary<>
收藏?如果你使用一个带有三个坐标的对象作为键(你可能已经为你的坐标设置了一个矢量类或结构?),你可以快速查找一组特定的坐标(接近O(1));有一个ContainsKey()
方法可以告诉你在任何给定位置是否存在另一个对象。
有两个并发症:
编辑:我应该提到您可以使用tuple<>
作为坐标向量/键。它已经有GetHash()
的实现,但你可能会发现(因为你使用了大量的对象),用更专业的版本覆盖它会提高你的性能。