创建一个大型2D阵列并在AS3中填充它

时间:2009-10-12 12:34:03

标签: flash actionscript-3

我想知道是否有更好的方法来创建一个大型2D阵列并用AS3填充单个项目?这是我目前正在做的一个快速示例:

private var array:Array = [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
                           [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
                           [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
                           [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
                           [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]];

但必须有更多功能的方式!提前谢谢。

4 个答案:

答案 0 :(得分:11)

难道你不能只使用'传统'循环来填充它吗?像

这样简单的东西
var numCols:uint = 10,
    numRows:uint = 10,
    fillValue:uint = 1,
    array:Array = new Array(),
    i:uint,
    j: uint;

for (i = 0; i < numRows; i++) {
  array.push(new Array());
  for (j = 0; j < numCols; j++) {
    array[i].push(fillValue);
  }
}

答案 1 :(得分:3)

我总是使用单维数组并编写自己的get / set函数来计算数组中(x,y)点的位置:

即获得元素:

return array[x+(y*_width)];

重置数组或设置它(一旦分配)

for(var i:uint=0;i<array.length;i++)
    array[i] = 1;

要点是:

  • 您只需要分配一个数组
  • 您可以快速重置或设置或复制元素
  • 我认为闪存使用“更少”的内存,或者整体上的开销更少,因为只存在一个数组

一个缺点是确保访问者和设置者功能进行范围检查,因为您的结果可能“有效”但不准确。 (即,如果x大于宽度但仍在数组范围内)

我在C(语言:-p)上“长大”,所以这似乎总是合乎逻辑的做事方式;分配一块内存并按照你想要的方式进行分割。

答案 2 :(得分:1)

kkyy提供的正确答案...虽然我会说经典,但您应该使用i < numColsj < numRows,因此访问权限为array[column][row] ...

另外,为了获得更高的性能:

var numCols:uint = 10,
    numRows:uint = 10,
    fillValue:uint = 1,
    array:Array = new Array(),
    columnProto:Array = new Array(),
    i:uint;

for (i = 0; i < numRows; i++)
    columnProto.push(fillValue);
for (i = 0; i < numCols; i++)
    array.push(columnProto.slice());

会导致更少的说明......但是当numCols * numRows相当大时,你才会注意到差异......

答案 3 :(得分:0)

Creating a 2D Array

var multiDimensionalArray:Array = new Array();
var boolArray:Array;
var MAX_ROWS = 5;
var MAX_COLS = 5;

//initalize the arrays
for (var row = 0; row <= MAX_ROWS; row++)
{
    `boolArray` = new Array();
    enter code here
    for (var col = 0; col <= MAX_COLS; col++)
        boolArray.push(false);
    }

    multiDimensionalArray.push(boolArray);
}

//now we can set the values of the array as usual
for (var row = 0; row <= MAX_ROWS; row++)
{
    for (var col = 0; col <= MAX_COLS; col++)
        boolArray[row][col] = true;
        trace('boolArray ' + row + ',' + col + ' = ' + boolArray[row][col]);
    }
}

I hope this will b usefull for u.,...