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 , incluidos booleanos , números , cadenas , funciones y otras tablas.Construir tablas con curly braces ( {} ):


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

Puedes usar una tabla como array o diccionario.Los arreglos utilizan una lista ordenada de números como índices, pero los diccionarios pueden tener números, cadenas y objetos como índices.

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

Arreglos

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

Crear matrices

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


-- Construir un array con tres elementos
local testArray = {"A string", 3.14159, true}
print(testArray)

Leer de arrays

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


-- Construir un array con tres elementos
local testArray = {"A string", 3.14159, true}
print(testArray[1]) -- Una cadena
print(testArray[2]) -- 3.14159
print(testArray[3]) -- true

Escribir a arrays

Para definir o reescribir el valor de un array en un índice, declare el número de índice en paréntesis cuadrados ( [index] ) seguido de = y el valor:


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

Iterar sobre arrays

Para iterar sobre un matriz/lista, puedes usar un bucle for .Debido a que los arrays tienen índices numéricos, también puedes usar un bucle numérico for de 1 a la longitud del array (#array).


local testArray = {"A string", 3.14159, true, "New string"}
-- Bucle usando iteración general
for index, value in testArray do
print(index, value)
end
-- Iterar usando el operador de longitud de array (#)
for index = 1, #testArray do
print(index, testArray[index])
end

Insertar artículos

Hay dos maneras integradas de insertar un elemento al final de un matriz/lista:

  • Pasa una referencia al array y el valor del elemento a la función table.insert() de Luau.
  • Añade el nuevo elemento 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, incluya un valor de posición como el segundo argumento de table.insert() .Esto inserta el nuevo elemento y empuja los siguientes elementos a una 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

Quitar artículos

Para eliminar un elemento de un matriz/lista, utilice table.remove() .Esto elimina el elemento en la posición especificada y mueve cualquier elemento siguiente de vuelta 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 clave-valor, donde las claves pueden ser cualquier número, cadena o objeto.

Crear diccionarios

Para crear una tabla de diccionario, define cada clave seguida de = y el valor . Separa cada pareja de clave-valor con una coma:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}

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


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

Leer de diccionarios

Para leer de un diccionario, añade un par de paréntesis después de su referencia y especifica el nombre de la clave.Haga referencia directamente a una clave de cadena usando comillas ( ["key"] ) o use un valor de variable ( [key] ).


local part = Instance.new("Part")
local testDictionary = {
partType = "Block",
[part] = true
}
-- Incluir citas para las claves de cadena
print(testDictionary["partType"]) -- Bloquear
-- Omitir citas para claves no de cadena
print(testDictionary[part]) -- true

Escribir a diccionarios

Para definir o reescribir el valor de una nueva o existente clave de diccionario, declare el nombre de la clave en paréntesis ( [key] ) seguido de = 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 clave-valor
testDictionary["fruitCount"] = 10
print(testDictionary["fruitName"]) -- Cereza
print(testDictionary["sour"]) -- falso
print(testDictionary["fruitCount"]) -- 10

Iterar sobre diccionarios

Para iterar sobre un diccionario, use la función global pairs() en un bucle 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
]]

Eliminar pares de clave-valor

Para eliminar o borrar una pareja de clave-valor de un diccionario, establece su valor para una clave 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 de o puntero 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
]]

Tablas de clonado

Clones poco profundos

Para copiar una tabla sin tablas anidadas, 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 profundamente una tabla
local function deepCopy(original)
-- Define la nueva tabla para la copia
local copy = {}
-- Repetir a través de la tabla original para clonar
for key, value in original do
-- Si el tipo del valor es una tabla, cópialo profundamente a la clave (índice)
-- Otro (o) el tipo no es una tabla, asigne el valor predeterminado al índice en lugar
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Devolver la copia finalizada de la tabla clonada profunda
return copy
end

Con la función en su lugar, puedes 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)

Congelar tablas

Congelar una tabla la hace de lectura única, lo que es útil para crear valores constantes que no quieres cambiar.El congelamiento es permanente; no hay método de "descongelación" o "deshielo".Para verificar si una tabla está congelada, use table.isfrozen() .

Congelaciones superficiales

Para congelar una tabla sin tablas anidadas, 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

Congelaciones profundas

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


local function deepFreeze(target)
-- Congelación superficial de la tabla
table.freeze(target)
-- Compruebe cada clave 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 su lugar, puedes congelar profundamente una tabla 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