【问题标题】:Problems declaring a 2 dimensional array声明二维数组的问题
【发布时间】:2013-03-24 19:17:54
【问题描述】:

我有以下代码:

    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报错了?

【问题讨论】:

  • U 的意思是当我把 [50] 表示该值必须在 0 到 49 之间?我总共有 50 个数组值。例如:_DepNo[0]、_DepNo[1]....._DepNo[49]。
  • @Coolguy:正确,数组索引从 0 开始,因此对于 50 个值,它们从 0..49 开始

标签: c# multidimensional-array jagged-arrays


【解决方案1】:

锯齿状数组[][]

如果使用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 array 的类型int[,]。他们制作了一个具有两个固定维度的数组。

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

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

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

【讨论】:

    【解决方案2】:

    你尝试的是 jagged arrays,而不是 multidimensional arrays

    如果你想使用二维数组,你可以像这样使用它;

     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]; 
    

    锯齿状数组是一个数组其元素是数组。的元素 锯齿状数组可以具有不同的维度和大小。锯齿状的 数组有时被称为“数组数组”。

    【讨论】:

    • 或许这应该是一条评论
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      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
      

      [][] 数组也称为“不规则数组”或“锯齿数组”,因为每一行的大小可以不同,因为每一行都是一个单独的数组。

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

      例如:

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

      然后你像这样访问元素:

      int value = _SpReadType[row,col];
      

      【讨论】:

      • 我只想要一个像这样的二维数组 _DepNo[1][1]=1; _DepNo[1][2]=1;类似的东西...
      • 我推荐你使用二维数组语法_DepNo[1,1]=1;,并声明为int[,] _DepNo = new int[ROWS,COLS];
      【解决方案5】:

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

      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

      【讨论】:

        猜你喜欢
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-23
        相关资源
        最近更新 更多