Tablas

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

El tipo de datos de la tabla puede almacenar múltiples valores de cualquier tipo que no sea nil, incluido booleanos, 1> números1>, 4> cadenas4>, 7> funciones7> y otras tablas. Construye tablas con cursivos ( 0> 0>):


-- Construye una tabla vacía asignada a la variable "t"
local t = {}
print(t) -- {}

Puedes usar una tabla como un array o diccionario . Los índices de matrizes usan una lista ordenada de números como índices, pero los diccionarios pueden tener números, cuerdas y objetos como índices.

Para obtener más información sobre las funciones incorporadas para trabajar con tablas, consulte la biblioteca table.

Matrices

Un array es una lista ordenada de valores. Los arrays son útiles para almacenar colecciones de datos, como un grupo de jugadores con permisos especiales.

Creando Matrices

Para crear un matizador usando una tabla Luau, declara los valores en orden secuencial, separados por comas.


-- Construye un mat阵 con tres elementos
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray)

Leer de matrizes

Para leer desde un matriz/lista, agregue un par de brackets cuadrados después de su referencia y especifique el número de índice del elemento dentro ( [pos] ):


-- Construye un mat阵 con tres elementos
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- Una cadena
print(testArray[2]) -- 3.14159
print(testArray[3]) -- Camera

Escribiendo a matrizes

Para definir o reescribir el valor de un matriz en un índice, declare el número de índice en caracteres cuadrados ( [index] ) seguido por = y el valor:


local testArray = {"A string", 3.14159, workspace.Camera}
testArray[2] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(testArray[4]) -- New string

Iterando sobre matrizes

Para repetir sobre un matriz/lista, puede usar un bucle for. Debido a que las matriz tienen índices numéricos, también puede usar un bucle numérico for desde 1 hasta la longitud de la matriz ( 1> # array1>).


local testArray = {"A string", 3.14159, workspace.Camera, "New string"}
-- Ciclo de uso general
for index, value in testArray do
print(index, value)
end
-- Iterar usando el operador de longitud del array (#)
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ Resultado de Salida:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 New string
]]

Insertando elementos

Hay dos formas de construcción para insertar un elemento en el final de un matriz/lista:

  • Pasa una referencia al arreglo y al valor del ítem a la función table.insert() de Luau.
  • Añade el nuevo artículo al array utilizando la sintaxis array[#array+1]

local testArray = {"A string", 3.14159}
table.insert(testArray, "New string")
testArray[#testArray+1] = "Another new string"
print(testArray[3]) -- Nueva cadena
print(testArray[4]) -- Another new string

Para insertar un elemento entre el comienzo y el final de un matriz/lista, incluir un valor de posición como el segundo argumento de table.insert() . Esto inserta el nuevo elemento y empuja los siguientes elementos hacia un posición de índice.


local testArray = {"First item", "Next item"}
table.insert(testArray, 2, "NEW ITEM #2")
print(testArray[1]) -- Primer objeto
print(testArray[2]) -- NUEVO ARTÍCULO #2
print(testArray[3]) -- Next item

Eliminando elementos

Para eliminar un elemento de un matriz/lista, usa table.remove() . Esto elimina el elemento en la posición especificada y mueve cualquier elemento siguiente a una posición de índice.


local testArray = {"First item", "Next item", "Last item"}
table.remove(testArray, 2)
print(testArray[1]) -- Primer objeto
print(testArray[2]) -- Last item

Diccionarios

Los diccionarios son una extensión de los arrays. Los diccionarios almacenan un conjunto de pares de valores de clave, donde las claves pueden ser cualquier número, cadena o objeto.

Creando diccionarios

Para crear una tabla de diccionario, define cada key seguido por = y el valor. Separa cada par de clave-valor con una coma:


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}

Las llaves para diccionarios pueden ser números, cadenas y objetos. Por ejemplo, una llave también puede ser un Instance. Para usar objetos como llaves, declare la llave en cursiva ( [key] ):


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}

Leer de diccionarios

Para leer de un diccionario, agregue un par de brackets después de su referencia y especifique el nombre de la llave. Agregue directamente una llave de referencia usando comillas ( ["key"] ) o use un valor de variable ( [key] ).


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}
-- Incluya comillas para las llaves de cuerda
print(testDictionary["PartType"]) -- Bloquear
-- Omitir citas para las llaves no estructuradas
print(testDictionary[part]) -- true

Escribiendo a diccionarios

Para definir o reescribir el valor de una nueva o existente clavede diccionario, declare el nombre de la llave en caracteres ( [key] ) seguido por = y el valor:


local testDictionary = {
FruitName = "Lemon",
Sour = true
}
-- Cambiar el valor de las llaves existentes
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- Insertar nuevo par de claves-valores
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- Cereza
print(testDictionary["Sour"]) -- falso
print(testDictionary["FruitCount"]) -- 10

Iterando sobre diccionarios

Para repetir sobre un diccionario, use la función global pairs() en un ciclo for :


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Resultado de Salida:
FruitName Lemon
Sour true
FruitColor Yellow
]]

Eliminando pares de valor clave

Para eliminar o borrar un par de valores clave de un diccionario, establece su valor para una llave en nil .


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
testDictionary["Sour"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Resultado de Salida:
FruitName Lemon
FruitColor Yellow
]]

Tablas como referencias

Si almacenas una tabla en una nueva variable, Luau no crea una copia de esa tabla. En cambio, la variable se convierte en una referencia o apunta a la tabla original. Cualquier referencia a una tabla refleja cualquier cambio en la tabla original:


local originalArray = {10, 20}
local arrayReference = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Cambiar valores en el matriz/listaoriginal
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Resultado de Salida:
Original: 10 20
Reference: 10 20
Reference: 1000 2000
]]

Clon de Tablas

Clones de Superficie

Para copiar una tabla sin tablas de nivel superior, Luau ofrece el método table.clone() .


local original = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
local clone = table.clone(original)

Clones Profundos

Para copiar una tabla más compleja con tablas anidadas dentro de ella, necesitarás usar una función recursiva similar a la siguiendo:


-- La función utilizada para copiar una tabla en profundidad
local function deepCopy(original)
-- Defina la nueva tabla para la copia
local copy = {}
-- Repita la tabla original para clon
for key, value in original do
-- Si el tipo de valor es una tabla, guárdala profundamente para la llave (índice)
-- De lo contrario (o) el tipo no es una tabla, asigna el valor predeterminado al Índice
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Devuelve la copia finalizada de la tabla clonada profunda
return copy
end

Con la función en lugar, puede hacer una copia profunda como sigue:


local original = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
local clone = deepCopy(original)

Tablas de congelación

Congelar una tabla hace que sea solo de lectura, lo que es útil para crear valores constantes que no quieres cambiar. El congelamiento es permanente; no hay método de "descongelar" o "descongelar". Para ver si una tabla está congelada, usa table.isfrozen() .

Congelamiento Superficial

Para congelar una tabla sin tablas de nivel superior, Luau ofrece el método table.freeze() .


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> attempt to modify a readonly table

Congelación Profunda

Para congelar una tabla más compleja con tablas anidadas dentro de ella, usa una función recursiva similar a la siguiendo:


local function deepFreeze(target)
-- Enfriar ligeramente la tabla
table.freeze(target)
-- Compruebe cada una de las llaves de la tabla y congélela si es una tabla
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end

Con la función en lugar, puede congelar una tabla profundamente como sigue:


local target = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(target)
target.playerInfo.playerID = 1 --> attempt to modify a readonly table