C# - 3D 数组的 3D 数组

C# - 3D array of 3D arrays

我想要一个非常大的 3D 网格。如果我简单地创建一个 3D 数组(即 T[,,]),我最终会在该网格中有很多未使用的 (3D) 位置,并且由于内存使用,网格将远不是我的大小需要它。

所以我的想法是制作一个 "hollow" 子 3D 网格(又名块)的 3D 网格,其中每个位置包含一个子 3D 网格。对于空块,该块的 3D 数组在父 3D 网格中不存在。

所以我有一个类型的值:T[,,][,,]

其中包含块的 "top level" 网格将是一个 3D 数组,其位置包含对块的引用,如果块为空,则为 null。

我的问题是:如何初始化 T[,,][,,] 类型的值?例如,如果我做 new T[3,3,3][3,3,3],编译器会大喊:

CS0178  Invalid rank specifier: expected ',' or ']'

谢谢。

创建新数组的语法如下:

T[,,][,,] a = new T[3,3,3][,,];

这为您提供了一个包含 null 个值的 3D 数组。您可以根据需要将它们设置为非空 3D 数组:

a[1,2,2] = new T[8,8,8];

您可以考虑使用其他方法来存储 3D 网格的 "chunks" - 例如,您可以创建一个 Dictionary,其中三元素元组作为键,3D 数组作为值。 This Q&A describes other available alternatives for implementing 3D matrices in C#.