Cristalab

                 ¿Quieres registrarte?

Arrays Multidimensionales en ActionScript

9 de Julio del 2007
12,779 visitas

Una Matriz (Array) es una variable que contiene a su vez más variables.

Por ejemplo:

Código :

var miMatriz:Array = new Array();
miMatriz = ["Elemento1", "Elemento2", "ElementoN"];


Si hacemos un trace(miMatriz); nos devuleve:

Código :

Elemento1, Elemento2, ElementoN


Y si hacemos un trace(miMatriz[0]); nos devuleve:

Código :

Elemento1


Esto es porque se empieza a contar el primer elemento desde el "0"(cero), es decir miMatriz tiene un length de 2, (0,1,2 que serian 3 elementos).

Ahora que sabemos que es una Matriz pasamos a ver Matriz Multidimensional.

Una Matriz Multidimensional es aquella que contiene Elementos "dentro" de los Elementos.
Por ejemplo:

Código :

myArray = [ [0,8,0,5,0,1,2,0],
            [1,0,2,0,0,2,2,1],
            [0,5,0,1,2,0,3,0],
            [5,2,1,0,3,0,1,5],
            [0,1,0,2,0,2,0,0],
            [2,0,3,0,1,5,1,5],
            [0,3,0,3,2,0,0,5],
            [3,0,0,5,0,1,0,0] ];



Si hacemos un trace(myArray); nos devuleve esto:

Código :

0,8,0,5,0,1,2,0,1,0,2,0,0,2,2,1,0,5,0,1,2,0,3,0,5,2,1,0,3,0,1,5,0,1,0,2,0,2,0,0,2,0,3,0,1,5,1,5,0,3,0,3,2,0,0,5,3,0,0,5,0,1,0,0


Que son todos los Elementos (en este caso números) de nuestra matriz.

Si queremos acceder al segundo elemento (el 8) escribimos:

Código :

trace(myArray[0][1]);



Escribimos "0" y "1" porque queremos acceder al segundo elemento("1", que es el 8) del primer elemento("0, que es [0,8,0,5,0,1,2,0] )

Suena complicado, pero no lo es tanto, sólo necesitas leerlo varias veces y ponerlo en práctica.

Ahora, para cargar todos lo elementos haremos esto:

Código :

for(var i:int = 0; i<myArray.length; i++)
{
   for(var j:int = 0; j<myArray[i].length; j++)
   {
      trace(myArray[i][j]);
   }
}



Son solo dos loops, el primero (i), se repite las veces de la cantidad de elementos de myArray (que en este caso son 8).

Y el segundo las veces de la cantidad de elementos que tiene cada elemento de myArray[i] (que también son 8), lo que en el for() nos da un resultado de 64 elementos.

El resultado del trace son los elementos del array.

¿Y para que hago todo esto si me va a dar lo mismo que trace(myArray)?

La diferencia es que los for() cargan cada elemento de uno por uno, con lo que podemos darles una acción a todos los elementos con pocas lineas.

¿Y para que me sirve una Matriz Multidimensional??

Pueden servir para variedad de cosas, algunos ejemplos son:

Posiciones, mapas y propiedades. En los Tile Based Games

Guardar datos. myArray = [["Juan", 18, "España"], ["Mario", 21, "Italia]]

En fin, solo hay que pensar para darles un buen uso y evitar hacer mucho código que pudiéramos evitar.

Como ejemplo les dejo un Editor de Mapas:


Artículos Relacionados


Etiquetas actionscript

Comentarios | Enviar un comentario
Que tal, esta muy bien el ejemplo ;) .

una cosa que me lleva de cabeza desde hace tiempo es...

¿ como creo Matriz Multidimensionales Dinamicamente?.

por que he probado varias formas y no me funciona como espero....

gracias.
Por: Vic_blog

Vic_blog :

¿ como creo Matriz Multidimensionales Dinamicamente?.

Aquí tienes una clase de AS3 para hacerlo. El código lo puedes pasar fácilmente a AS2
Por: Zguillez
hola a todos espero que responda aquien...
si contruyo una matriz tal como esta en el ejemplo de arriba; entonces como haria para que se vea en el datagrid como el ejmplo cuando se asocie desde un dataprovider???????????????
Por: Roly_blog
Roly, te recomiendo ver este tutorial por Elecash sobre el componenete Datagrid, y en la función de "llenarDataGrid", solo cambias las acciones del for por los de la array, ya que en ese ejemplo toma los datos de un XML. No es complicado solo experimenta un poco.
Por: Carloz.Yanez
Pregunto desde mi ignorancia, ¿porque si le pongo un carácter que no sea un número me lo devuelve como indefinido? Gracias.
Por: Noyvern_blog
Oigan, alguien sabe si hay forma de leer cuántas columnas y filas tiene una matriz pero cada dato en una varible por separado....
no se si me explique. Algo de la forma:
$key=count_columns($array);
$value=count_rows($array);
Por: elarmoncru_blog
muy bueno el ejemplo de un array multidimensional, y preguntarles si estaria correcto utilizar un array multidimensional para realizar un tablero para el juego damas o como lo podria realizar el tablero
Por: Daniel06_blog
buenas tardes .
si quiero eliminar un elemento de un array[i] , i= posicion especifica, me sirve el metodo "pop"
y si quiero agregar un elemento de un array[i] , i= posicion especifica, me sirve el metodo "push"

por q no me sirve este code???

var arreglo1:Array= new Array();
var arreglo2:Array= new Array();

arreglo1[0]=mmc1;
arreglo1[1]=mmc2;
arreglo1[2]=mmc3;
arreglo1[3]=mmc4;
arreglo1[4]=mmc5;
arreglo1[5]=mmc6;
arreglo1[6]=mmc7;
arreglo1[7]=mmc8;
arreglo1[8]=mmc9;
arreglo1[9]=mmc10;
arreglo1[10]=mmc11;
arreglo1[11]=mmc12;
arreglo1[12]=mmc13;
arreglo1[13]=mmc14;
arreglo1[14]=mmc15;
arreglo1[15]=mmc16;
arreglo1[16]=mmc17;
arreglo1[17]=mmc18;


for(var i=0; i<=18;i++){
wil=random(18)+1;
ar=arreglo1[wil];
trace("ar"+ar);
arreglo2[i].push(ar);
trace("argl2"+arreglo2.length);
arreglo1[wil].pop(ar);
trace("argl1"+arreglo1.length);
}


gracias !
Por: wil01
Excelente, felicitaciones por estas explicaciones son muy buenas. Si pudiese calificarlos les daría mis mas altas calificaciones.
Por: Jaime Castellar_blog
me auto respondo ....
creo q nadie vio este post!

el problema segun creo yo es q los metodos para agregar o quitar lo hacen pero al final del arreglo,

pra hacer lo q intentaba , tube q hacerlo con split....

saludos
Por:
Hola.
Mi lio con los arrays multidimensionales está a la hora de rellanarlos diamicamente desde un xml:

Tengo un listado de fotos en un xml con este esquema:
<foto id="nombrefoto" era="2" img="nombrefoto.jpg"></foto>

El parámetro básico és el de era (tengo seis eras) ya que quiero cargar el array de manera que vaya ordenando las fotos por era. O sea, que en el primer array del array multidimensional tenga las fotos de la era 1, en el segundo array, las fotos de la era 2 etc..

Cómo lo cargo y lo ordeno a la vez?

Gracias
Por: oriol
menestro animar una animacion con mas de 30 mc, declaro el array con los mc, y luego atraves del for quiero que se haga la animacion con lo mx transitions, es posible esto?

gracias
Por: NOCTIFER
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.