Comunidad de diseño web y desarrollo en internet online

Creación de Matrices en Actionscript 3

Hace días preguntaron como hacer Matrices o Arreglos Multidimensionales en Actionscript 3. Me tome la tarea de hacer una clase que facilite este proceso pero con Vectores para aprovechar la rapidez de este objeto. Es mucho mejor usar Vector que Array en Actionscript 3.

Clase VectorUtils para manipulación de matrices y vectores en Actionscript 3


Código :

package com.renzocastro.utils 
{
   import flash.system.ApplicationDomain;
   import flash.utils.getQualifiedClassName;
   
   public class VectorUtils
   {
      static private const VECTOR_OPEN:String = 'Vector.<';
      static private const VECTOR_CLOSE:String = '>';
      
      static public var applicationDomain:ApplicationDomain;
      
      static public function matrix(type:Class, ...args):*
      {
         var res:*;
         var total:int = args.length;
         
         if ( total == 0 )
         {
            res = new type;
         }
         else
         {
            var className:String = getQualifiedClassName(type);
            for (var i:int = 0; i < total; i++)
               className = VECTOR_OPEN + className + VECTOR_CLOSE;
            //endfor
            
            if ( applicationDomain == null ) applicationDomain = ApplicationDomain.currentDomain;
            var ClassVector:Class = Class(applicationDomain.getDefinition(className));
            
            res = _matrix(new ClassVector(int(args[0]), true), className, args);
         }
         
         return res;
      }
      
      
      static private function _matrix(instance:*, className:String, params:Array, index:int=0):*
      {
         className = className.replace( new RegExp(VECTOR_OPEN + '(.*)' + VECTOR_CLOSE), '$1');
         
         if ( className.indexOf(VECTOR_OPEN) > -1 )
         {
            var ClassVector:Class = Class(applicationDomain.getDefinition(className));
            var total:int = instance.length;
            
            for (var i:int = 0; i < total; i++)
               instance[i] = _matrix(new ClassVector(int(params[index+1]), true), className, params, index + 1);
            //endfor
         }
         
         return instance;
      }
      
      static public function isVector(value:*):Boolean
      {
         return getQualifiedClassName(value).indexOf('Vector.<') > -1;
      }
      
   }

}

Su uso:

Código :

var vec1:* = VectorUtils.matrix(int, 2);
trace( vec1[1] );

var vec2:* = VectorUtils.matrix(Number, 2, 3);
trace( vec2[1][2] );

var vec3:* = VectorUtils.matrix(String, 2, 3, 4);
vec3[1][2][3] = 'This is Cristalab!';
trace( vec3[1][2][3] );

// Usando una clase de otro dominio
VectorUtils.applicationDomain = loader.contentLoaderInfo.applicationDomain;
var NewClass:Class = VectorUtils.applicationDomain.getDefinition("ClaseDeOtroSWF") as Class;
var vec3:* = VectorUtils.matrix(NewClass, 10, 10);
vec3[9][5] = new NewClass();

// Bonus: Es Vector?
trace( VectorUtils.isVector(vec3)  );


Espero les sirva ;) .

¿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

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

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