Comunidad de diseño web y desarrollo en internet online

Clase de Actionscript 3 para arrays multidimensionales

Siguiendo el tip creado por carloz.yanez sobre los arrays multidimensionales, escribí una clase de ActionScript 3 para crear y controlar el array. La clase MultiArray

Veamos primero su uso ^^

En el documento .fla

Código :

import MultiArray;
var array:MultiArray = new MultiArray();


Ahora para llenar de datos el array utilizaremos las funciones pushFila() y pushColumna()

Código :

array.pushFila(["1a","1b","1c"]);
array.pushFila(["2a","2b","2c","2d"]);
array.pushFila(["3a","3b"]);

Esto nos dará como resultado un array multidimensional asi:

Código :

1a,1b,1c,<>
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:

Código :

array.pushColumna(["1e","2e","3e","4e","5e"]);

Resultado:

Código :

1a,1b,1c,<>,1e
2a,2b,2c,2d,2e
3a,3b,<>,<>,3e
<>,<>,<>,<>,4e
<>,<>,<>,<>,5e

Podemos seguir modificando el array sustituyendo un item en concreto:

Código :

array.putItem(2,3,"XX");

Código :

1a,1b,1c,<>,1e
2a,2b,2c,2d,2e
3a,3b,<>,<>,3e
<>,<>,XX,<>,4e
<>,<>,<>,<>,5e

O sustituyendo filas y columnas enteras:

Código :

array.swapFila(1,["Z1","Z2","Z3","Z4","Z5"]);
array.swapColumna(3,["1S","2S","3S","4S","5S"]);

Resultado:

Código :

1a,1b,1c,1S,1e
Z1,Z2,Z3,2S,Z5
3a,3b,<>,3S,3e
<>,<>,XX,4S,4e
<>,<>,<>,5S,5e

A partir de aquí recuperamos los datos con:

Código :

trace(array.getItem(1,2));

Se obtiene el item de la fila 2 columna 3 (tener en cuenta que el primer elemento de un Array es el cero):

Código :

3b


Para obtener una fila entera:

Código :

trace(array.getFila(2));

Se obtiene un array:

Código :

3a,3b,<>,3S,3e


Para obtener una cloumna entera:

Código :

trace(array.getColumna(4));

Se obtiene un array:

Código :

1e,Z5,3e,4e,5e


Este sería el código de la clase MultiArray:":

Código :

package {
   //------------------------------
   public class MultiArray {
      //--------------------------
      private var _array:Array;
      private var _dx:int;
      private var _dy:int;
      public var _vacio:String;
      //
      //--------------------------
      public function MultiArray() {
         _array = new Array();
         _dx = 0;
         _dy = 0;
         _vacio = "<>";
      }
      //--------------------------
      public function pushFila(fila:Array):void {
         _dy = (_dy > 0)?_dy+1 :1;
         _dx = (_dx > fila.length)?_dx :fila.length;
         _array.push(fila);
         controlaVacios();
      }
      //--------------------------
      public function pushColumna(columna:Array):void {
         while (_dy < columna.length) {
            pushFila([_vacio]);
         }
         _dx = (_dx > 0)?_dx+1 :1;
         for (var i:int = 0; i < _dy; i++) {
            _array[i].push(columna[i]);
         }
         controlaVacios();
      }
      //--------------------------
      public function putItem(ix:int,iy:int,item):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++) {
            while (_array[i].length<_dx) {
               _array[i].push(_vacio);
            }
         }
      }
      //--------------------------
   }
}

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate