¿Cómo iterar a través de una tabla en Lua?
Por lo tanto, tengo una tabla algo similar a estas líneas:
arr =
{
apples = { 'a', "red", 5 },
oranges = { 'o', "orange", 12 },
pears = { 'p', "green", 7 }
}
No parece que it's posible acceder a ellos sobre la base de su índice, y los propios valores son tablas, así que acabo de hacer el primer valor de la tabla anidada el índice de la misma, por lo que ahora se ve así:
arr =
{
apples = { 0, 'a', "red", 5 },
oranges = { 1, 'o', "orange", 12 },
pears = { 2, 'p', "green", 7 }
}
Por lo tanto, ahora cada vez que uso una de estas tablas, sé lo que el índice es, pero todavía no se puede llegar a la tabla utilizando el índice, así que empecé a escribir una función que bucles a través de todos ellos, y comprobar los índices hasta que encuentra la correcta. Entonces me di cuenta... ¿cómo puedo recorrerlas si no puedo referirme a ellas por su índice? Así que ahora estoy atascado. Realmente quiero ser capaz de escribir arr.manzanas vs arr[1] la mayor parte del tiempo, pero por supuesto es necesario hacer ambas cosas a veces.
Para iterar sobre todos los pares clave-valor de una tabla puede utilizar
pairs
:salidas:
Editar: Tenga en cuenta que Lua no garantiza ningún orden de iteración para la parte asociativa de la tabla. Si quieres acceder a los elementos en un orden específico, recupera las claves de
arr
y ordénalo. Luego accede aarr
a través de las claves ordenadas:salidas:
Si desea hacer referencia a una tabla anidada mediante varias claves, basta con asignarlas a claves distintas. Las tablas no se duplican y siguen haciendo referencia a los mismos valores.
Este bloque de código permite recorrer todos los pares clave-valor de una tabla (http://lua-users.org/wiki/TablesTutorial):