2009-05-18 19 views

回答

3

对于真正的n维的东西,你可能不得不下降到更简单的概念 - 也许是一个多维数组(T[,...,])。

如果维数是已知且恒定的(但是> 1),则锯齿状阵列(T[]...[])或使用List<T>等的包装等都是可行的。

使用未知维度的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 [] [] []。 – 2009-05-18 13:13:12

1

如果提前知道维数,则可以为每个维创建一个“列”。

相关问题