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

标签 c# arrays multidimensional-array new-operator

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

所以我的想法是制作一个由子 3D 网格(也称为 block )组成的“空心”3D 网格,其中每个位置都包含一个子 3D 网格。对于空 block ,该 block 的 3D 数组在父 3D 网格中不存在。

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

其中包含 block 的“顶级”网格将是一个 3D 数组,其位置包含对 block 的引用,如果 block 为空,则为 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 网格的“ block ”——例如,您可以制作一个 Dictionary,将三元素元组作为键,将 3D 数组作为值。 This Q&A describes other available alternatives for implementing 3D matrices in C# .

关于C# - 3D 数组的 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729595/

相关文章:

c - 在无需声明巨大的2D数组的情况下找到平均尺寸分​​布的有效方法是什么?

c# - 如何访问 C# 类库中的 HTTP 缓存?

c# - 在运行时清除 asp.net 窗体

c# - 如果默认为空,在 C# 中使用空合并运算符是否总是多余的?

php - foreach循环的迭代问题

.net - 按内存顺序物理排列的矩形阵列

c# - 尝试从 Oracle 加密函数读取 DES3 加密值

arrays - 如何向排序数组添加特定数量的反转

c++ - 为什么进程返回-1?

java - 使用单个 for 循环打印二维数组