Clase de Actionscript 3 para arrays multidimensionales
Siguiendo un post de Cristalab sobre los arrays multidimensionales, escribà una clase de ActionScript 3 para crear y controlar el array. La clase MultiArray:
//------------------------------
public class MultiArray {
//--------------------------
private var _array:Array;
private var _dx:int;
private var _dy:int;
public const _vacio:String = "**"
//
//--------------------------
public function MultiArray() {
_array = new Array();
_dx = 0;
_dy = 0;
}
//--------------------------
public function pushFila(fila:Array):void {
_dy += 1;
if(_dx <= fila.length){
_dx = fila.length;
}
_array.push(fila);
controlaVacios();
}
//--------------------------
public function pushColumna(columna:Array):void {
var columnLength:Number = columna.length;
while (_dy <columnLength) {
pushFila([_vacio]);
}
_dx += 1;
for (var i:int = 0; i <_dy; i++) {
_array[i].push(columna[i]);
}
controlaVacios();
}
//--------------------------
public function putItem(ix:int,iy:int,item:Object):void {
_array[iy][ix]=item;
}
//--------------------------
public function swapFila(filaNum:int,fila:Array):void {
_array[filaNum] = fila;
controlaVacios();
}
//--------------------------
public function swapColumna(columnaNum:int,columna:Array):void {
for (var i:int = 0; i <columna.length; i++) {
_array[i][columnaNum] = columna[i];
}
controlaVacios();
}
//--------------------------
public function getArray():Array {
return _array;
}
//--------------------------
public function getItem(ix:int,iy:int):Object {
return _array[iy][ix];
}
//--------------------------
public function getFila(filaNum:int):Array {
return _array[filaNum];
}
//--------------------------
public function getColumna(columnaNum:int):Array {
var array:Array = new Array();
for (var i:int = 0; i <_dy; i++) {
array.push(_array[i][columnaNum]);
}
return array;
}
//--------------------------
public function traceArray():void {
for (var i:int = 0; i <_dy; i++) {
trace(_array[i]);
}
}
//--------------------------
//--------------------------
private function controlaVacios():void {
for (var i:int = 0; i <_dy; i++) {
var arrayLength:Number = _array[i].length;
while (arrayLength<_dx) {
_array[i].push(_vacio);
}
}
}
//--------------------------
}
}
Veamos su uso:
En el documento .fla
var array:MultiArray = new MultiArray();
Ahora para llenar de datos el array utilizaremos las funciones pushFila() y pushColumna()
array.pushFila(["2a","2b","2c","2d"]);
array.pushFila(["3a","3b"]);
Esto nos dará como resultado un array multidimensional asi:
2a,2b,2c,2d
3a,3b,**,**
nota: podemos hacer un trace del array con la función traceArray()
El sÃmbolo "**" lo hemos añadido para rellenar los espacios vacÃos del array. Es decir, el Ãtem que estarÃa en la posición "1d" no existÃa en el array introducido para la primera fila como no puede quedar vacÃo le introducimos un valor falso. Esto lo controlamos con una función privadacontrolaVacios(). El sÃmbolo lo hemos definido en la variable _vacio y podÃamos haber usado cualquier otro string.
Lo mismo pasarÃa al añadir otra columna. Se rellenaran los espacios vacÃos:
Resultado:
2a,2b,2c,2d,2e
3a,3b,**,**,3e
**,**,**,**,4e
**,**,**,**,5e
Podemos seguir modificando el array sustituyendo un item en concreto:
Resultado:
2a,2b,2c,2d,2e
3a,3b,**,**,3e
**,**,XX,**,4e
**,**,**,**,5e
O sustituyendo filas y columnas enteras:
array.swapColumna(3,["1S","2S","3S","4S","5S"]);
Resultado:
Z1,Z2,Z3,2S,Z5
3a,3b,**,3S,3e
**,**,XX,4S,4e
**,**,**,5S,5e
A partir de aquà recuperamos los datos con:
Se obtiene el item de la fila 2 columna 3 (tener en cuenta que el primer elemento de un Array es el cero):
Para obtener una fila entera:
Se obtiene un array:
Para obtener una columna entera:
Se obtiene un array:
A partir de aquà podemos ir añadiendo métodos a la clase según nuestras necesidades
Post relacinonados:
1 Comment »
RSS feed for comments on this post. TrackBack URI









EXCELENTE
gracias