在我的项目中,我有很多这样的代码:
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]
?
再一次,元素类型仅在运行时才知道。
答案 0 :(得分:8)
泛型应该可以解决这个问题:
static T[][] CreateArray<T>(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<char>(10, 20);
答案 1 :(得分:1)
你可以这样做:
int[,] array = new int[4,2];
你得到的是一个多维数组(4x2)。 Here是一篇关于多维数组的好文章。
术语锯齿状数组通常指的是具有不同第二维的数组。例如:
int[][] jagged = new int[2][];
jagged[0] = new int[5]; // 5 elements
jagged[1] = new int[1]; // 1 element
所以这不是2x5数组,而是锯齿状数组..
答案 2 :(得分:1)
如果:
您可以使用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;
}
但是你确定你需要在运行时按动态类型吗?
答案 3 :(得分:-1)
正如mOsa所提到的,如果你想要矩形锯齿状阵列,那么你最好使用多维数组。
int[,] array = new int[dimension, dimension2];
将生成一个矩形数组。
使用锯齿状数组的原因是,如果要创建具有不同次要维度的数组。锯齿状数组实际上是一个数组数组,其中多维数组是一个略有不同的野兽。