有没有办法实现类似n#34;破坏"三维数组?

时间:2014-04-02 09:59:54

标签: c# arrays list arraylist hashtable

我有一个在3d空间中创建对象实例的算法,为了避免双重放置,我必须为每个实例循环遍历所有实例,以找出实例是否具有与现有实例相同的id。

我的梦想解决方案是一个三维数组,我可以通过x y z坐标参考。 但是我猜这是不可能的,因为公羊的限制。

所以我想知道是否有类似“破碎”的数组,我仍然可以通过Array [x] [y] [z]引用,但工作就像一个列表,所以如果那个特定的xyz从未被声明,那么只是不存在,因此不会填满公羊。

如果有人能够指出我正在寻找的方向,甚至提供一些如何实现它的代码示例,我将非常感激。

1 个答案:

答案 0 :(得分:3)

您是否考虑过Dictionary<>收藏?如果你使用一个带有三个坐标的对象作为键(你可能已经为你的坐标设置了一个矢量类或结构?),你可以快速查找一组特定的坐标(接近O(1));有一个ContainsKey()方法可以告诉你在任何给定位置是否存在另一个对象。

有两个并发症:

  1. 您不能拥有重复的密钥,因此您不需要在任何给定的协调集上拥有多个对象。
  2. 查找的速度取决于密钥类型的哈希函数,在您的情况下,可能是您自己滚动的3d矢量类/结构。您需要花一点时间为此实现一个合适的哈希算法。
  3. 编辑:我应该提到您可以使用tuple<>作为坐标向量/键。它已经有GetHash()的实现,但你可能会发现(因为你使用了大量的对象),用更专业的版本覆盖它会提高你的性能。