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