动态创建锯齿状矩形arrays

在我的项目中,我有很多这样的代码:

int[][] a = new int[firstDimension][]; for (int i=0; i<firstDimension; i++) { a[i] = new int[secondDimension]; } 

元素的类型是不同的。

有没有办法写一个像这样的方法

 createArray(typeof(int), firstDimension, secondDimension); 

并获得new int[firstDimension][secondDimension]

同样,元素类型仅在运行时才知道。

generics应该做的伎俩:

 static T[][] CreateArray(int rows, int cols) { T[][] array = new T[rows][]; for (int i = 0; i < array.GetLength(0); i++) array[i] = new T[cols]; return array; } 

调用此方法时必须指定类型:

 char[][] data = CreateArray(10, 20); 

那么你可以这样做:

 int[,] array = new int[4,2]; 

你得到的是一个多维数组(4×2)。 这是一篇关于多维数组的好文章。

术语锯齿状数组通常指的是具有不同第二维度的数组。 例如:

 int[][] jagged = new int[2][]; jagged[0] = new int[5]; // 5 elements jagged[1] = new int[1]; // 1 element 

所以这不是一个2×5数组,而是一个锯齿状的数组..

如果:

  • 你肯定想要一个锯齿状的arrays,而不是mOsa提到的多维arrays。
  • 你肯定需要它在运行时是动态类型,而不是在编译时使用generics,正如Henk所提到的那样。

你可以使用Array.CreateInstance之类的东西:

 static Array CreateArray (Type t, int rows, int cols) { Array arr = Array.CreateInstance (typeof(Array), rows); for (int i = 0; i < rows; rows++) { arr.SetValue (Array.CreateInstance(t, cols), i); } return arr; } 

但是你确定在运行时需要动态类型吗?

正如mOsa所提到的,如果你想要矩形锯齿状arrays,那么最好使用多维数组。

 int[,] array = new int[dimension, dimension2]; 

将生成一个矩形数组。

使用锯齿状数组的原因是,如果要创建具有不同次要维度的数组。 锯齿状数组实际上是一个数组数组,其中多维数组是一个略有不同的野兽。