Bien, como he tenido este día libre, les daré la segunda entrega este mismo día…
Esta entrega tratará sobre un tipo de variable especial, hablo de las variables tipo table (tablas), o también conocidas como arrays (arreglos).Estas variables son más bien un conjunto de variables o de datos, los cuales pueden ser de distintos tipos, como por ejemplo:
variable = {2,"hola",true}
Se puede observar claramente que los elementos del arreglo son de distinto tipo.
Otra característica de los arreglos es que pueden tener varias dimensiones...
Usando el ejemplo anterior:
variable = {2,"hola",true}
Este arreglo tiene una sola dimensión y tiene 3 elementos, para lograr tener más dimensiones, se insertan arreglos en arreglos, es decir, los elementos de un arreglo pueden ser arreglos también, como por ejemplo:
variable = {{2,"hola",true}, {"chao",3,false}}
Este arreglo tiene 2 x 3 dimensiones.
Pero los arreglos no siempre tienen dimensiones definidas, estos también pueden tener dimensiones que no sean específicas, es decir, por ejemplo, puede que uno de sus elementos tenga 3 dimensiones y otro 4, otro 5, etc.. , como este:
variable = {{2,"hola",true}, {"chao",3,false,true}, {1,2,3,4,5}}
Y te estarás preguntando, ¿Y cómo accedo a los valores dentro de un arreglo?
Fácil, con su índice, por ejemplo, si tengo:
variable = {2,"hola",true}
Si quiero acceder a "hola", tendría que poner el nombre del arreglo seguido del número del índice del elemento al que quiero acceder entre corchetes, en nuestro caso sería:
variable[2]
Eso hace referencia al elemento "hola", ya que busca al elemento 2 de la tabla variable.
Ahora supongamos que tenemos el arreglo de 2 x 3:
variable = {{2,"hola",true}, {"chao",3,false}}
Para acceder al dato 3 del arreglo dos, se va del más externo al más interno, es decir, primero el número del arreglo y luego el del elemento, en nuestro caso:
variable[2][3]
Hará referencia a false ya que variable[2]
sería {"chao",3,false}
y luego variable[2][3]
sería el tercer elemento de variable[2]
, que sería, false
.
Otra característica de los arreglos o tablas es que tienen varias formas de acceder a sus elementos, como los índices numéricos que ya los hemos visto y los índices por nombres, estos últimos se logran declarando variables dentro de un arreglo, por ejemplo:
jugador = {nombre = "Chimecho",x = 2,y = 10}
Para acceder a estos, se usa el nombre del arreglo, seguido de un punto "." y el nombre de la variable que contiene el dato al que queremos acceder, en nuestro caso:
Se puede acceder al dato "Chimecho" mediante la referencia jugador.nombre
, jugador.x
para acceder al valor 2 y jugador.y
para acceder al valor 10
Resumiendo con algunos ejemplos:
var1 = {1, 2, "Chimecho"} var2 = {x = 2, y = 10,var3={5}}
La forma de acceder a los valores y sus resultados serían:
var1[1] -> 1 var1[2] -> 2 var1[3] -> "Chimecho" var2.x -> 2 var2.y -> 10 var2.var3[1] -> 5
Los arreglos no es necesario definirlos al crearlos, se pueden ir agregando campos, tanto numéricos como por nombres. Pueden ir mezclados, esto es, no necesariamente han de ser numéricos o por nombres, pueden contener ambos tipos de claves a la vez, por ejemplo:
mitabla = { } -- creamos mitabla ( vacia, pero del tipo arreglo ) mitabla[1] = "Datos aquí." mitabla[3] = "Más datos, ups, nos hemos saltado el 2!" mitabla.x = 34 mitabla.y = 54 mitabla["personaje"] = image.load( ... )
Aquí tenemos una tabla que contiene:
dos índices numéricos, 1 y 3, con datos y varios índices por nombre, en uno de ellos hay cargada una imagen.
Con esto quiero decir que se pueden cargar cualquier tipo de objetos o datos dentro de una tabla. Asimismo pueden haber tablas dentro de tablas dentro de tablas.... etc...
Bien, para acceder a los datos internos, sería como antes:
mitabla[1] y mitabla[3] tendrán los primeros datos, y
mitabla.x mitabla.y mitabla.personaje (nótese que puedo utilizar mitabla["nombre"] o mitabla.nombre , es lo mismo)
Cuanta información contiene nuestra tabla? 5 campos.
Haciendo #mitabla (o table.maxn(mitabla), que es lo mismo ya que el operador de longitud (#) llama a esa función automáticamente si es una tabla) veremos que nuestra tabla mide exactamente... 1
Ehm. ¿Uno? no no, mide más, pero Lua tiene su forma de medir las tablas :D
Lua para medir, realiza un recorrido sólo numérico por la tabla, y en cuanto encuentra un indice vacío, dice que hasta ahi mide la tabla. Así que en este caso, miraría mitabla[1] (OK), mitabla[2] (VACIO), finaliza y el resultado es: 1.
Así que tener cuidado añadiendo indices numéricos manualmente, aunque bueno, existen funciones para ello :P
En vuestros códigos, si utilizais el frame by frame, (es decir, redibujais todo), procurad evitar cosas del tipo:
for i = 1, #mitabla do --xxx -- algo usando #mitabla --xxx end for i = 1, #mitabla do --xxx --xxx end
Ya, que si mentalmente pensamos que hacer #mitabla es hacer un for más, y contar posiciones, si en nuestro código no modificamos mitabla en longitud, tendremos que estamos realizando 3 veces un for que nos quitará velocidad.
Es mucho más comodo utilizar en este caso, local longitud = #mitabla; y luego usar longitud, ya que tendrá la información guardada y no tendremos que medir y medir y medir... con la consiguiente pérdida de velocidad.
Tutoriales realizados con la ayuda y asesoramiento de DeViaNTe
Saludos a todos los que me siguen! :D
Comentarios
Interesante el Extra para
Interesante el Extra para perfeccionistas.
By PerezRE
Buen tuto chimecho, gracias a ti y a tu tutorial, solo me hace falta saber utilizar la tabla.
Aaah! tendre que estudiar esto de los arrays y subarrays por un largo tiempo. Jajajaja!.
--[NO EXISTEN LOS LIMITES =D]--
;Muy bueno chime :D mejor
;Muy bueno chime :D mejor explicado no creo jeje un saluddo :)
Bueno no entendi lo ultimo( evitar preferccionistas )
Bueno no entendi lo ultimo ( evitar perferccionistas ), pero muy buenos tus tutoriales!
Lo último...
El extra para perfeccionistas, se refiere a que si se va a usar repetidamente la operación de longitud de arreglos (#arreglo), y no se va a cambiar el arreglo durante el proceso, es preferible almacenar en una variable el número que devuelve la operación, que realizar la operación cada que se usa el valor.
Esto se debe a que la operación en sí, es un ciclo más, y cada que la usamos, se hace de nuevo, lo cual disminuye un poco la velocidad de nuestro programa.
Espero haberme explicado, saludos.
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
Cada día se aprende
Muchas gracias Chimecho buenísimo tutorial espero el otro (Y)
No es por nada
No es por nada, pero odio los arrays, me quedo este año una asignatura por solo este tema. De todas maneras me parece bien explicado. xD
El tutorial está bastante
El tutorial está bastante bien pero hay algo que me ha hecho sangrar un poco. ¿Como se come eso de arrays(arreglos)??
array es la traducción al ingles de la palabra matriz (o vectores, que son matrices con una sola fila o columna).
por eso lo de array lo dejaría pero lo de arreglos quítalo por favor.
Aunque array en castellano se
Aunque array en castellano se traduzca como matriz literalmente, contextualmente se traduce como arreglo. Lo suelen llamar arreglo los informaticos de habla hispana más veteranos, y si miras libros medianamente antiguos, años 90 o incluso actuales, aún sale la traducción como arreglo.
->Mi Blog
Hombre a mi me parece raro
Hombre a mi me parece raro porque voy a comenzar el 5º año de ingeniería informática y nunca he oído a nadie decir arreglos, he escuchado decir tablas, arrays, vectores, matrices... pero arreglos nunca.
De todas maneras si me dices que tu también lo has escuchado por ahí será que me falta recorrer mundo ;)
No se de donde seras, pero
No se de donde seras, pero aqui en mexico se usan tus terminos y tambien arreglos, la diferencia en decir matriz, vector, etc... es para diferenciar la dimensiones del arreglo (unidimensional,bidimesional). En realidad lo curioso es aqui en mi region NADIE dice tablas! jaja, las tablas las identificamos como las tablitas de excel aunque graficamente los arreglos bidimensionales se vean como tablas.
De cuantas dimensiones soporta LUA?
Buen tuto
La verdad es que hacía falta un tutorial de arrays bien hecho y explicado, y aunque sean ejemplos bastante sencillos es suficiente como para entender su funcionamiento y su uso.
Un saludo Chimecho.
-----[[7 años en Scenebeta, con la misma ilusión que la del primer día]]----
no enteni mucho
no entendi mucho... pero se la idea ;);) de todos modos buen tuto le echare varios vistasos i
probare arto... saludosss!!!
Esta facil phanthom ya sabes
Esta facil phanthom ya sabes aqui andamos :)
No comprendo Chimecho :S
No comprendo Chimecho :S
Disculpa xDDDDDDDDDD
. . .
Llamadme n00b, pero para que sirve acceder a estas "variables"?
El uso se lo das tú...
Pero por poner un ejemplo, mmm, supongamos que tienes 10 enemigos en pantalla, cada uno con su posición en x, en y, salud, etc...
Luego supongamos que quieres hacer que se muevan, imagina tener que usar 10 variables en x y 10 variables en y :S, resulta más sencillo programar un bucle que realice un recorrido por los 10 arrays y que tome las 2 variables en x y en y, dependiendo del índice (lo comprenderás mejor en estructuras de control).
Es más prático usar arrays cuando tienes datos que pertenecen a un determinado tipo (en nuestro caso, los enemigos), que hacer quien sabe cuantas variables, y luego usarlas una a una... se hace realmente tedioso.
Un saludo!
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
Am . . .
Gracias, creio que me he enterado xD