2009-05-18 11 views

答えて

3

本当にn次元のものについては、もっと単純な概念、多分多次元配列(T[,...,])に落とさなければならないでしょう。

ジグザグ配列(T[]...[])またはList<T>などを使用するラッパーのようなものは、次元数がわかっていて定数(ただし> 1)であれば実行可能です。

未知の次元のArrayを使用した例:

int[] dimensions = { 3, 2, 5 }; // etc 
    Array arr = Array.CreateInstance(
     typeof(int), dimensions); 
    int[] index = {0,0,0}; // etc 
    arr.SetValue(3, index); 

しかし、寸法が知られている場合は明らかにそれは簡単です:

int[, ,] arr = new int[3, 2, 5]; 
    arr[0, 0, 0] = 3; 

多次元配列の問題は、彼らがすぐにできることですCLRが触れるのは大きすぎます。これは、ギザギザの配列や他のラッパーが(複数の小さなオブジェクトに分割することで)便利ですが、構築をもっと難しくします:

int[][][] arr = new int[3][][]; 
    for(int i = 0 ; i < 3 ; i++) { 
     arr[i] = new int[2][]; 
     for(int j = 0 ; j < 2 ; j++) { 
      arr[i][j] = new int[5]; 
     }    
    } 
    arr[0][0][0] = 3; 

これらのうちのいずれかは、通常、おそらく合理的なアプローチであるクラス内でラップすることができます。

+0

また、ジグザグ配列int [] [] []を使用すると、各ディメンションのサイズが異なる場合があります。 –

+0

上記の配列コードに基づいてコレクションを構築するのは簡単です。 @ニック - 確かに; – Brian

+0

;ギザギザの例が追加されました。コードを正しく取得するのに時間がかかります!しかし、次元数がわからない場合は、ギザギザの配列を扱うのは非常に難しいです。 –

1

事前に寸法の数がわかっている場合は、寸法ごとに1つの「列」を作成するだけで済みます。

関連する問題