【问题标题】:error accessing 2d array with c#使用 c# 访问二维数组时出错
【发布时间】:2015-06-22 05:43:39
【问题描述】:

我是 Unity3D 和 c# 的新手。我正在修补在二维数组中存储一些网格位置,但是我遇到了

the array index is out of range

错误,我不知道为什么:

public int[,] myArray; 

    myArray = new int[,]{
        {0,375},
        {75,300},
        {150,225},
        {225,150},
        {300,75},
        {375,0}
    };

    Debug.Log(myArray[1,4]); // array index is out of range... why? I expected to get 75.

以下是我寻求帮助的其他一些资源: http://wiki.unity3d.com/index.php/Choosing_the_right_collection_type

https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx

【问题讨论】:

    标签: c# multidimensional-array unity3d grid 2d


    【解决方案1】:

    您有一个 6x2 的 2D 数组 - 而不是 2x6 的。如果您考虑通过array[row, column] 访问数组,那么您在初始化中指定的每个“子数组”都是一个“行”。

    例如,myArray[0, 1] 是 375 - 第一个“行”的第二个元素,即 { 0, 375 }

    基本上,您需要调整数组初始化或数组访问。所以如果你真的想要一个 2x6 数组,你需要:

    myArray = new int[,] {
        { 0, 75, 150, 225, 300, 375 },
        { 375, 300, 225, 150, 75, 0 }
    };
    

    ...或者您可以保留现有的初始化,并访问myArray[4, 1]

    C# 规范是这样解释的:

    对于多维数组,数组初始值设定项的嵌套级别必须与数组中的维数一样多。最外层的嵌套级别对应于最左边的维度,最内层的嵌套级别对应于最右边的维度。数组每个维度的长度由数组初始值设定项中相应嵌套级别的元素数量决定。对于每个嵌套数组初始值设定项,元素的数量必须与同一级别的其他数组初始值设定项相同。例子:

     int[,] b = {{0, 1}, {2, 3}, {4, 5}, {6, 7}, {8, 9}};
    

    创建一个二维数组,最左边的维度长度为 5,最右边的维度长度为 2:

     int[,] b = new int[5, 2];
    

    然后用以下值初始化数组实例:

    b[0, 0] = 0; b[0, 1] = 1;
    b[1, 0] = 2; b[1, 1] = 3;
    b[2, 0] = 4; b[2, 1] = 5;
    b[3, 0] = 6; b[3, 1] = 7;
    b[4, 0] = 8; b[4, 1] = 9;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多