我想知道是否有更好的方法来创建一个大型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]];
但必须有更多功能的方式!提前谢谢。
答案 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 < numCols
和j < 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.,...