我相信在您的情况下,最好的实现是关联数组(特别是它的哈希表实现)。键是坐标,值是您存储的数据。根据您的编程语言,您需要以一种或另一种方式处理密钥。
例子:
[0,0,0] -> someData(1,2,3,4,5)
[0,0,1] -> someData(4,2,4,6,2)
[0,0,2] -> someData(2,3,2,1,5)
使用简单的关联数组将为您提供出色的插入速度和读取速度,但是如果需要选择一些复杂的数据块,代码将变得一团糟。在这种情况下,使用一些数据库可能是合理的(尽管比关联数组的 hashmap 实现慢)。它可以让你批量查询一些特定的数据。例如,您可以使用一个简单的查询获取整行(或几行)数据:
SELECT * FROM data WHERE x=1 AND y=2 ORDER BY z ASC
或者,假设从 3d 数据的中间选择一个 2x2x2 立方体:
SELECT * FROM data WHERE x>=5 AND x <=6 AND y>=10 AND Y<=11 AND z >=3 AND z <=4 ORDER BY x ASC, y ASC, z ASC
编辑:
再想一想,如果维度的大小在运行时不会改变 - 你应该自己使用所有数学计算一维数组,因为它是最快的解决方案。如果您尝试将 3 维数组初始化为数组数组的数组,则对元素的每次读/写都需要在内存中增加 2 跳才能找到所需的地址。但是,编写一些函数,例如:
int pos(w,h, x,y,z) {return z*w*h+y*w+x;} //w,h - dimensions, x,y,z, - position
会使它被大多数编译器内联并且非常快。