有没有办法实现像“损坏”的三维数组这样的东西

本文关键字:数组 三维 实现 损坏 有没有 | 更新日期: 2023-09-27 17:56:21

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

梦想的解决方案是一个 3 维数组,我可以通过 x y z 坐标引用它。但是,由于公羊限制,我想这是不可能的。

所以我想知道是否有类似"损坏"数组的东西,我仍然可以通过 Array[x][y][z] 引用,但工作方式类似于列表,所以如果从未声明过特定的 x y z,它就不存在,因此不会填满 ram。

如果有人能为我指出我实际正在寻找的正确方向,甚至可能提供一些如何实现它的代码示例,我将不胜感激。

有没有办法实现像“损坏”的三维数组这样的东西

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

有两个并发症:

  1. 不能有重复的键,因此在任何给定的坐标集上都不需要有多个对象。
  2. 查找的速度取决于密钥类型的哈希函数,在您的情况下,这可能是您自己滚动的 3d 向量类/结构。为此,您需要花一点时间实现一个体面的哈希算法。

编辑:我应该提到您可以使用tuple<>作为坐标矢量/键。它已经有一个 GetHash() 的实现,但您可能会发现(因为您正在使用大量对象)用更专业的版本覆盖它会增加您的性能。