动态创建锯齿状矩形阵列

时间:2010-03-16 22:01:31

标签: c# .net 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]

再一次,元素类型仅在运行时才知道。

4 个答案:

答案 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)

如果:

  • 你肯定想要一个锯齿状的阵列,而不是mOsa提到的多维阵列。
  • 你肯定需要它在运行时是动态类型,而不是在编译时使用泛型,正如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;
}

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

答案 3 :(得分:-1)

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

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

将生成一个矩形数组。

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