大型二维数组始终 Returns 未定义

Large 2D Array Always Returns Undefined

我有一个二维数组,绝对不会 return 我需要的值。我从这个数组开始:

var userdata:Array = new Array(new Array(1000),new Array(4))

然后我尝试将所有值设置为 0,这样:

this.onLoad()
{
    for (i = 0; i < 1000; i++)
        {
            for (j = 0; j < 4; j++)
            {
                userdata[i][j] = 0
                trace(userdata[i][j])
            }
        }
}

这条轨迹 returns 8 个 0,然后是大量的 "undefined"s。我不明白为什么会这样。我也尝试这样的事情:

userdata[5][0] = 0
trace(userdata[5][0])

它仍然 returns "undefined"。有人可以帮忙吗?

要理解为什么只有 8 个 "zeros" 和许多未定义的值,让我们从数组声明开始:

var userdata:Array = new Array(new Array(1000),new Array(4));

在这里你应该明白你已经创建了一个只有 2 个单元格的数组(这就是 userdata[5][0]undefined 的原因):第一个单元格是一个包含 1000 个元素的数组,第二个是一个4 个元素的数组,这就是为什么你只能设置 8 个项目(2 x 4):第一个单元格的 1000 个中的第 4 个第一个项目 + 第二个单元格的第 4 个第一个项目。

让我们return回答您的问题,您想要创建一个包含 1000 行和 4 列的多维数组。首先,我们创建一个包含 1000 行(单元格)的数组:

var a:Array = [1000];  // you can write it : new Array(1000);

然后,我们为每一行创建 4 列,并设置如下值:

var i:Number, j:Number;
for (i = 0; i < 1000; i++)
{
    // create the 4 columns 
    a[i] = [4];     // you can write it : a[i] = new Array(4);

    for (j = 0; j < 4; j++)
    {
        a[i][j] = 0;
    }
}

然后我们可以验证我们的数组:

trace(a[0][0]);     // gives : 0
trace(a[255][2]);   // gives : 0
trace(a[255][5]);   // gives : undefined, because we have only 4 columns
trace(a[1500][0]);  // gives : undefined, because we have only 1000 rows

希望能帮到你。