我想要一个非常大的 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/