声明二维数组的问题

时间:2013-04-03 08:07:30

标签: c# multidimensional-array jagged-arrays

我有以下代码:

    public int[] _SpDep = new int[50];
    public int[][] _SpDepCnt = new int[50][];
    public int[][] _SpReadType = new int[50][];

     _DepNo = Convert.ToInt16(strFileName[n].Substring(1, 2));
     _CntNo = Convert.ToInt16(strFileName[n].Substring(6, 2));
     _SpDep[_DepNo] = 1;
     _SpDepCnt[_DepNo][_CntNo] = 1;
     _SpReadType[_DepNo][_CntNo] = 1;

到达此行时出错:

      _SpDepCnt[_DepNo][_CntNo] = 1;

但我不知道出了什么问题?任何意见?是2d array错误地声明了吗?

5 个答案:

答案 0 :(得分:5)

锯齿状数组[][]

如果使用int[][]类型的数组(jagged array),您希望像这样初始化数组:

public int[] _SpDep = new int[50];
public int[][] _SpDepCnt = new int[50][];
public int[][] _SpReadType = new int[50][];

然后初始化数组中的数组:

var length = 20;
for (int i = 0; i < length; i++)
{
    _SpDepCnt[i] = new int[length];
     _SpReadType[i] = new int[length];
}

它被称为锯齿状数组,因为第二部分的长度可以变化,例如你可以这样:

[1,2,3,4]
[5,6]
[7,8,9]

多维数组[,]

我相信你想使用名为multidimensional arrayint[,]类型。他们制作了一个两个固定维度的数组。

public int[,] _SpDepCnt = new int[50, 20];
public int[][] _SpReadType = new int[50, 20];

多维数组将为每个索引创建相同大小的数组:

[1,2,3]
[4,5,6]
[7,8,9]

答案 1 :(得分:3)

使用[] []声明“数组数组”时,需要初始化外部维度以引用已分配的数组,如下所示:

public int[][] _SpReadType = new int[50][];

for (int i = 0; i < 50; ++i)
    _SpReadType[i] = new int[SIZE]; // Where you have to decide on SIZE

[] []数组也称为“参差不齐的数组”或“锯齿状数组”,因为每行的大小可能不同,因为每一行都是一个单独的数组。

或者,您可以使用以下语法使用实际的2D数组:[,]

例如:

public int[,] _SpReadType = new int[50,SIZE];

然后你可以访问这样的元素:

int value = _SpReadType[row,col];

答案 2 :(得分:1)

这是一个锯齿状的数组,你必须先初始化该元素才能使用它

myJaggedArray[0] = new int[5];
myJaggedArray[1] = new int[4];
myJaggedArray[2] = new int[2];

http://msdn.microsoft.com/en-us/library/2s05feca(v=vs.71).aspx

答案 3 :(得分:1)

您尝试的内容称为 jagged arrays ,而不是 multidimensional arrays

如果你想使用2维数组,你可以使用它;

 public int[,] _SpDepCnt = new int[50, 50];
 _SpDepCnt[_DepNo, _CntNo] = 1;

如果你想使用锯齿状数组,你可以像使用它一样;

public int[][] _SpReadType = new int[50][];

for (int i = 0; i < 50; i++)
    _SpReadType[i] = new int[SIZE]; 
  

锯齿状数组是一个数组,其元素是数组。的要素   锯齿状阵列可以具有不同的尺寸和尺寸。锯齿状的   数组有时被称为“数组数组”。

答案 4 :(得分:0)

您必须为2D阵列保留内存

public int[][] _SpDepCnt = new int[50][];
_SpDepCnt[_DepNo] = new int[50];
_SpDepCnt[_DepNo][_CntNo] = 1;