我相信你的情況下,最好的實施將是一個Associative array(具體來說,一個hash table實施)。鍵將是座標,值將是您存儲的數據。根據您的編程語言,您需要以某種方式處理密鑰。
實施例:
[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
編輯: 另一個想法是,如果尺寸的大小在運行時不會改變 - 您應該使用所有數學自己的1維數組,因爲它是最快的解決方案。如果嘗試將三維數組初始化爲數組數組,則每次對元素進行讀/寫操作都需要在內存中追加2次跳轉才能找到所需的地址。然而,編寫一些功能,如:
int pos(w,h, x,y,z) {return z*w*h+y*w+x;} //w,h - dimensions, x,y,z, - position
會讓它由大多數編譯器內聯,並且相當快。