C# - 3D阵列的3D阵列

时间:2017-12-09 14:29:35

标签: c# arrays multidimensional-array new-operator

我想拥有一个非常大的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 ']'

谢谢。

1 个答案:

答案 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#