Tablas

Las tablas son colecciones de entradas con claves y valores. Son la única estructura de datos agregados que se proporciona. Todas las demás estructuras de datos (matrices, listas, conjuntos, etc.) se crean a partir de tablas. Las claves y los valores de las tablas pueden ser de cualquier tipo, incluidas otras tablas. Las claves y los valores de la misma tabla pueden mezclar tipos.

  • Constructores de mesas
  • Uso de tablas
  • Tablas como matrices
  • Tablas como registros

Constructores de mesas

Los constructores de tablas permiten especificar una tabla con claves y valores asociados. La sintaxis es:

{[clave1] = valor1, [clave2] = valor2,…}

donde las claves y valores son expresiones. Si las claves son cadenas que no son palabras reservadas, se pueden omitir los corchetes y las comillas que rodean las claves. Ejemplo:

{clave1 = “valor1”, clave2 = “valor2”, clave3 = “valor3”}

Una tabla vacía se especifica simplemente con {}.

Se puede usar un constructor de tablas en una asignación para establecer una variable para que haga referencia a una tabla. Ejemplos:

local t1 = {} – establece t1 en una tabla vacía local t2 = {key1 = “value1”, key2 = “value2”, key3 = “value3”}

Tenga en cuenta que las tablas en sí mismas son anónimas. Más de una variable puede hacer referencia a la misma tabla. Continuando con el ejemplo anterior:

t3 local = t2: tanto t2 como t3 se refieren a la misma tabla

Uso de tablas

Como era de esperar, puede usar claves para buscar valores en una tabla. La sintaxis es table [key], donde table es una referencia de tabla (normalmente una variable a la que se asigna una tabla) y key es una expresión que proporciona la clave. Si se utiliza en una expresión y la clave existe en la tabla, devuelve el valor asociado a la clave. Si la clave no está en la tabla, devuelve cero. Si se usa como variable en una asignación y la clave no existe en la tabla, se crea una nueva entrada para la clave y el valor. Si la clave ya existe en la tabla, reemplaza el valor de la clave por el nuevo valor. Ejemplos:

local t = {} – establece t en una tabla vacía t [“k1”] = “v1” – crea una entrada para la clave “k1” y el valor “v1” v1 = t [” k1”] – establece v1 en el valor de la clave “k1” = “v1” t [” k1”] = “new_v1” – establece el valor de la clave “k1” en “new_v1”

Tabla como matrices

La matriz tradicional se puede implementar utilizando una tabla con claves de enteros como índices. Una matriz puede tener cualquier índice, incluidos los negativos, pero la convención es comenzar las matrices en el índice 1 (no en 0, como es el caso de lenguajes como C y Java). Hay un constructor de tablas de propósito especial para este tipo de matrices:

{valor1, valor2, valor3,…}

Las referencias a la matriz son entonces array [index].

El operador de longitud # devuelve el número de elementos en una matriz con índices consecutivos comenzando en 1. Ejemplo:

local a = {“value1”, “value2”, “value3”} local length = #a – establece la longitud en la longitud de la matriz a = 3

Las matrices pueden ser dispersas, donde solo se asignan los elementos definidos. Pero # no se puede usar en una matriz dispersa con índices no consecutivos. Ejemplo:

local sparse_array = {} – configura una matriz vacía sparse_array [1] = “value1” – agrega un elemento en el índice 1 sparse_array [99] = “value99” — agrega un elemento en el índice 99

Las matrices multidimensionales se pueden configurar como tablas de tablas. Por ejemplo, una matriz 3x3 podría configurarse mediante:

local m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9} local v22 = m[2][2] — establece v22 en 5

Tablas como registros

Los registros con campos se pueden implementar como tablas con claves de nombre de campo. El formulario de referencia table.field se puede usar para la tabla [“field”]. Ejemplos:

local person = {name = “John Smith”, phone = “777-777-7777”} local name = person.name – Establece el nombre en “John Smith”

Se puede usar una matriz de tablas para una secuencia de registros. Ejemplo:

local people = { {name = “John Smith”, phone = “777-777-7777”}, {name = “Jane Doe”, phone = “888-888-8888”} … }

name = people[2].name: Establece el nombre en “Jane Doe”.

Tablas