2017-05-01 31 views
0

私は古いVC++コードをC#に翻訳しています。私はこれを行うにはどうすればよい3次元配列をC#

init_ltr[firstchar-'a'][secchar-'a'][ix] = wordnum; 

:C++プログラムでは、私はその後のような項目を参照することができ、実行時に指定した第三の次元で、3次元配列を持っている

int * init_ltr [26][28]; 

int init_ltr_size = x;  // gets assigned to something 

// array allocated and initialized 
for (i=0; i < 26; i++) 
    for (j=0; j < 28; j++) 
     init_ltr[i][j] = new int [init_ltr_size]; 

C#?私はint [] init_ltr [26][28]と宣言しようとしましたが、コンパイラはそれを好まなかったのです。可能であれば、リストや他のものを使用する代わりに3次元配列を保持したいので、私のコードを大量に変更する必要はありません。

+1

_「...代わりにリストを使用しての...」_ - あなたは 'その' Item'性質を持つList'は、そう何のコード変更がとにかく – MickyD

+0

を必要としない '[]'速記を可能にすることを実現しますあなたの問題は_ "ダイナミック" _ではないので、_ "リスト"は必要ありません_ – MickyD

答えて

2

では、ギザギザの配列と多次元の配列の2つのオプションがあります。

ジャグ配列:

int[][][] init_ltr = new int[26][][]; 

int init_ltr_size = x; 

// array allocated and initialized 
for (i=0; i < 26; i++) 
    init_ltr[i] = new int[28][]; 
    for (j=0; j < 28; j++) 
     init_ltr[i][j] = new int[init_ltr_size]; 

init_ltr[0][0][0] = 0; 

多次元配列:

int[,,] init_ltr = new int[26, 28, x]; 
init_ltr[0,0,0] = 0; 
+0

ありがとう、ギザギザの配列ソリューションは私がやろうとしていたものに最も近いものです。 – tcrosley

1

C#

var size1 = 26; 
    var size2 = 28; 

    var initLtr = new int[size1][][]; 
    var initLtrSize = 33;  // gets assigned to something 

    for (var i = 0; i < size1; i++) 
    { 
     initLtr[i] = new int[size2][]; 
     for (var j = 0; j < size2; j++) 
      initLtr[i][j] = new int[initLtrSize]; //it could even be different sizes in each array e.g: new int[i + j] 
    } 

    initLtr[0][0][0] = 3; 

それは問題だか、ジャグ配列内の配列のそれぞれを初期化します。

0

DesertFoxによって投稿ソリューションの代替を多次元配列は以下を参照してください、より良い構文を持っている傾向があります。最初の2次元はハードコードされているので、2D配列を使用して、3次元のジグザグ配列を使用することができます。私は[3、5]を使用します。それを[26、28]に変更することができます。

int[,][] init_ltr = new int[3, 5][]; // init_ltr [26, 28][] 
int init_ltr_size = 2; // Assign some value 
for (var i = 0; i <= init_ltr.GetUpperBound(0); i++) 
    for (var j = 0; j <= init_ltr.GetUpperBound(1); j++) 
    { 
     init_ltr[i, j] = new int[init_ltr_size]; 
     for (var k = 0; k < init_ltr[i, j].Length; k++) 
      init_ltr[i, j][k] = (i + 1) * (j + 1) * (k + 1); // Assign some value 
    } 

// Print values of arrays. Use int_ltr[i, j][k] 
for (var i = 0; i <= init_ltr.GetUpperBound(0); i++) 
    for (var j = 0; j <= init_ltr.GetUpperBound(1); j++) 
     for (var k = 0; k < init_ltr[i, j].Length ; k++) 
      Console.WriteLine(init_ltr[i, j][k]);