我想拥有一个非常大的3D网格。如果我只是创建一个3D数组(即T[,,]
)我将最终在该网格中有很多未使用的(3D)位置,并且由于内存使用,网格将远离如何很大我需要它。
所以我的想法是制作一个空心的#34;子3D网格(也称为块)的3D网格,其中每个位置包含子3D网格。对于空的块,该块的3D数组不存在于父3D网格中。
所以我的类型值为:T[,,][,,]
"顶级"包含块的网格将是一个3D数组,其位置包含对块的引用,如果块是空的,则为null。
我的问题是:我如何初始化T[,,][,,]
类型的值?例如,如果我做new T[3,3,3][3,3,3]
,编译器就会大喊大叫:
CS0178 Invalid rank specifier: expected ',' or ']'
谢谢。
答案 0 :(得分:4)
创建新数组的语法如下:
T[,,][,,] a = new T[3,3,3][,,];
这为您提供了null
值的3D数组。您可以根据需要将它们设置为非空3D阵列:
a[1,2,2] = new T[8,8,8];
您可以考虑使用其他替代方法来存储3D网格的“块” - 例如,您可以将具有三元素元组的Dictionary
作为键,将3D数组作为值。 This Q&A describes other available alternatives for implementing 3D matrices in C#