Tabelas

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

O tipo de dados da tabela pode armazenar vários valores de qualquer tipo que não seja , incluindo booleanos , números , strings , funções e outras tabelas.Construa tabelas com curly braces ( {} ):


-- Construir uma tabela vazia atribuída à variável "t"
local t = {}
print(t) -- {}

Você pode usar uma tabela como um array ou dicionário.Arrays usam uma lista ordenada de números como índices, mas dicionários podem ter números, strings e objetos como índices.

Para mais informações sobre funções integradas para trabalhar com tabelas, veja a biblioteca table .

Arranjos

Um array é uma lista ordenada de valores.Arranjos são úteis para armazenar coleções de dados, como um grupo de jogadores com permissões especiais.

Criar arrays

Para criar um array usando uma tabela Luau, declare os valores em ordem sequencial, separados por vírgulas.


-- Construir um array com três itens
local testArray = {"A string", 3.14159, true}
print(testArray)

Leia de arrays

Para ler de um array, adicione um par de retângulos quadrados após sua referência e especifique o número de índice do elemento dentro de ( [pos] ):


-- Construir um array com três itens
local testArray = {"A string", 3.14159, true}
print(testArray[1]) -- Uma string
print(testArray[2]) -- 3.14159
print(testArray[3]) -- true

Escrever em arrays

Para definir ou reescrever o valor de um array em um índice, declare o número do índice em parênteses quadrados ( [index] ) seguido por = e o 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 matrizes

Para iterar sobre um array, você pode usar um for loop.Como os arrays têm índices numéricos, você também pode usar um ciclo numerico for de 1 até a comprimento do array ( #array ).


local testArray = {"A string", 3.14159, true, "New string"}
-- Ciclo usando iteração geral
for index, value in testArray do
print(index, value)
end
-- Iterar usando o operador de comprimento de array (#)
for index = 1, #testArray do
print(index, testArray[index])
end

Inserir itens

Existem duas maneiras integradas de inserir um item no final de um array :

  • Passe uma referência para o array e o valor do item para a função Luau's table.insert() .
  • Adicione o novo item ao array usando a síntaxe array[#array+1].

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

Para inserir um item entre o começo e o fim de um array, inclua um valor de posição como o segundo argumento de table.insert().Isso insere o novo item e empurra os seguintes itens para uma posição de índice.


local testArray = {"First item", "Next item"}
table.insert(testArray, 2, "NEW ITEM #2")
print(testArray[1]) -- Primeiro item
print(testArray[2]) -- NOVO ITEM #2
print(testArray[3]) -- Next item

Removendo itens

Para remover um item de um array, use table.remove() .Isso remove o item na posição especificada e move quaisquer itens seguintes de volta a uma posição de índice.


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

Dicionários

Dicionários são uma extensão de arrays. Dicionários armazenam um conjunto de pares de chave-valor, onde as chaves podem ser qualquer número, string ou objeto.

Criar dicionários

Para criar uma tabela dicionária, defina cada chave seguida por = e o valor . Separe cada par de chave-valor com um ponto-e-vírgula:


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

As chaves para dicionários podem ser números, strings e objetos.Por exemplo, uma chave também pode ser um Instance.Para usar objetos como chaves, declare a chave em parênteses quadrados ( [key] ):


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

Leia de dicionários

Para ler de um dicionário, adicione um par de reticências após sua referência e especifique o nome da chave.Faça referência direta a uma chave de corda usando either ( ["key"] ) ou ( .key ), ou use um valor de variável ( [key] ).


local part = Instance.new("Part")
local testDictionary = {
partType = "Block",
[part] = true
}
-- Inclua citações para chaves de corda
print(testDictionary["partType"]) -- Bloquear
-- Ou use . para indexar chaves de corda sem espaços
print(testDictionary.partType) -- Bloquear
-- Omitir citações para chaves não-string
print(testDictionary[part]) -- true

Escrever em dicionários

Para definir ou reescrever o valor de uma nova ou existente chave de dicionário, declare o nome da chave em parênteses ( [key] ) ou, se a chave for uma string, use ( .key ) seguido por = e o valor:


local testDictionary = {
fruitName = "Lemon",
sour = true
}
-- Alterar o valor das chaves existentes
testDictionary["fruitName"] = "Cherry"
testDictionary.sour = false
-- Insira um novo par de chave-valor
testDictionary.fruitCount = 10
print(testDictionary.fruitName) -- Cerejeira
print(testDictionary.sour) -- falso
print(testDictionary.fruitCount) -- 10

Iterar sobre dicionários

Para iterar sobre um dicionário, use um loop for :


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
for key, value in testDictionary do
print(key, value)
end
--[[ Saída resultante:
fruitName Lemon
sour true
fruitColor Yellow
]]

Remover pares de chave-valor

Para remover ou apagar um par de chave-valor de um dicionário, defina seu valor para uma chave para nil .


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
testDictionary.sour = nil
for key, value in testDictionary do
print(key, value)
end
--[[ Saída resultante:
fruitName Lemon
fruitColor Yellow
]]

Tabelas como referências

Se você armazenar uma tabela em uma nova variável, o Luau não cria uma cópia dessa tabela.Em vez disso, a variável se torna uma referência ou apontador para a tabela original.Qualquer referência a uma tabela reflete quaisquer alterações na tabela original:


local originalArray = {10, 20}
local arrayReference = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Alterar valores no array original
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Saída resultante:
Original: 10 20
Reference: 10 20
Reference: 1000 2000
]]

Clone tabelas

Clones superficiais

Para copiar uma tabela sem quaisquer tabelas aninhadas, o Luau oferece o método table.clone().


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

Clones profundos

Para copiar uma tabela mais complexa com tabelas aninhadas dentro dela, você precisará usar uma função recursiva semelhante à seguinte:


-- A função usada para clonar profundamente uma tabela
local function deepClone(original)
-- Defina a nova tabela para a cópia
local clone = table.clone(original)
-- Itere através da tabela original para verificar os valores da tabela
-- Se uma tabela for encontrada como um valor, clone profundo para a chave (índice)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Retorne a cópia finalizada da tabela clonada profunda
return clone
end

Com a função em vigor, você pode fazer uma cópia profunda da seguinte forma:


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

Tabelas de congelamento

Congelar uma tabela torna-a apenas leitura, o que é útil para criar valores constantes que você não quer mudar.Congelamento é permanente; não há método "descongelar" ou "descongelar" .Para verificar se uma tabela está congelada, use table.isfrozen() .

Congelamentos superficiais

Para congelar uma tabela sem quaisquer tabelas aninhadas, o Luau oferece o método table.freeze().


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

Congelamentos profundos

Para congelar uma tabela mais complexa com tabelas aninhadas dentro dela, use uma função recursiva semelhante à seguinte:


local function deepFreeze(target)
-- Congelamento superficial da tabela
table.freeze(target)
-- Verifique cada chave da tabela e congele-a se for uma tabela
for _, value in target do
-- Certifique-se de que o valor não está congelado; se já estiver, um erro ocorrerá
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(v)
end
end
end

Com a função em vigor, você pode congelar profundamente uma tabela da seguinte forma:


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