2017-12-09 6 views
1

非常に大きな3Dグリッドが必要です。私が単に3D配列(すなわちT[,,])を作成すると、そのグリッド内に未使用の(3D)ポジションがたくさん残ってしまいます。メモリ使用量のために、グリッドは必要な大きさから遠く離れています。C# - 3D配列の3D配列

私の考えは、各位置にサブ3Dグリッドが含まれるサブ3Dグリッド(別名チャンク)の「中空」の3Dグリッドを作成することです。空のチャンクの場合、そのチャンクの3D配列は親3Dグリッドには存在しません。

だから私は、型の値があります。チャンクが空の場合はチャンクが含まれている「トップレベル」のグリッドは、3Dその位置チャンクへの参照を含む配列、またはnullになるだろうT[,,][,,]

を。

私の質問は、T[,,][,,]の値をどのように初期化するのですか?たとえば、new T[3,3,3][3,3,3]を実行すると、コンパイラは叫んでいます。

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

ありがとうございます。次のように新しいアレイを作成するための

答えて

4

構文は次のとおりです。

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

これはあなたnull値の3次元配列を与えます。 - たとえば、あなたがキーとしてDictionaryの三要素を持つタプルを作ることができる

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

あなたはあなたの3Dグリッドの「チャンク」を保存するための他の選択肢を検討することがあります。必要に応じて、null以外の3Dアレイにそれらを設定することができます3D配列を値として使用します。 This Q&A describes other available alternatives for implementing 3D matrices in C#

+0

ありがとう、それは私が必要な構文です。私は辞書のアプローチを検討します。 – Virus721