Tablas

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

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

Constructores de tablas

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

{[key1] = value1, [key2] = value2, …}

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

{key1 = “value1”, key2 = “value2”, key3 = “value3”}

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

Un constructor de tabla se puede utilizar en una asignación para establecer una variable para hacer referencia a una tabla. Ejemplos:

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

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

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

Uso de la tabla

Como era de esperar, puede usar claves para buscar valores en una tabla. La sintaxis es table[clave], donde table es una referencia de tabla (normalmente una variable asignada a 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, esto devuelve nil. Si se utiliza 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 mediante una tabla con claves enteras como índices. Una matriz puede tener cualquier índice, incluidos los negativos, pero la convención es iniciar matrices en el índice 1 (no 0 como es el caso con lenguajes como C y Java). Hay un constructor de tabla de propósito especial para tales matrices:

{value1, value2, value3, … }

Las referencias de matriz son entonces matrices[índice].

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”} longitud local = #a: Establece la longitud a 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 = {}: Configurar una matriz vacía sparse_array[1]= “value1”: Agregar un elemento en el índice 1 sparse_array[99]= “value99”: Agregar 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] – sets v22 to 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 utilizar para la tabla[“field”]. Ejemplos:

local person = {name = “John Smith”, phone = “777-777-7777”} local name = person.name – sets name to “John Smith”

Se puede utilizar 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 – sets name to “Jane Doe”