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 dado da tabela pode armazenar múltiplos valores de qualquer tipo que não seja nil, incluindo booleans, 1> números1>, 4>cordas4>, 7>funções7> e outras tabelas. Construir tabelas com aspas curvas ( 0> 0>):


-- Construa 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,cordas e objetos como índices.

Para mais informações sobre funções incorporadas para trabalhar com tabelas, see the table library.

Matrizes

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

Criando Arrays

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


-- Construa um array com três itens
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray)

Lendo de Arrays

Para ler de um matriz / lista, adicione um par de aspas retornas depois de sua referência e especifique o número de índice do elemento dentro ([pos] ):


-- Construa um array com três itens
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- Uma string / cadeia / texto
print(testArray[2]) -- 3.14159
print(testArray[3]) -- Camera

Escreva para Arrays

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

Para iteração sobre um matriz / lista, você pode usar um loop for. Como os índices numéricos dos arrays, você também pode usar um loop numérico for de 1 até a extensão do array ( 2># array2> ).


local testArray = {"A string", 3.14159, workspace.Camera, "New string"}
-- Loop usando iteração geral
for index, value in testArray do
print(index, value)
end
-- Iterate usando o operador de comprimento da matriz (#)
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ Resultado da saída:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 New string
]]

Inserindo Itens

Existem duas maneiras incorporadas de inserir um item no final de um matriz / lista:

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

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

Para inserir um item entre o início e o fim de um matriz / lista, 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 matriz / lista, use table.remove() . Isso remove o item na posição especificada e move qualquer item seguinte de volta para 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 arranjos. Dicionários armazenam um conjunto de pares de valores-chave, onde as chaves podem ser qualquer número, string / cadeia / textoou Objeto.

Criando Dicionários

Para criar uma tabela de dicionário, 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, caracteres e objetos. Por exemplo, uma chave também pode ser um Instance. Para usar objetos como chaves, declare a chave em ponte ( [key] ). Para usar objetos como chaves, declare a chave em ponte ( [key] ).


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

Lendo de Dicionários

Para ler de um dicionário, adicione um par de aspas depois de sua referência e especifique o nome da chave. Diretamente referenciar uma chave de string usando aspas ( ["key"] ) ou use um valor de variável ( [key] ).


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}
-- Incluir citações para chaves de string
print(testDictionary["PartType"]) -- Bloquear
-- Omitir citações para chaves não estruturadas
print(testDictionary[part]) -- true

Escrevendo para Dicionários

Para definir ou reescrever o valor de uma nova ou existente chave de dicionário, declare o nome da chave em ponte ( [key] ) seguido por = e o valor:


local testDictionary = {
FruitName = "Lemon",
Sour = true
}
-- Alterar o valor de chaves existentes
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- Insira um novo par de valor de chave
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- Cereja
print(testDictionary["Sour"]) -- falso
print(testDictionary["FruitCount"]) -- 10

Iterando sobre Dicionários

Para iteração sobre um dicionário, use a função global pairs() em um loop for:


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

Removendo Pares de Valor da Chave

Para remover ou substituir um par de valores de chave de um dicionário, configure seu valor para uma chave em nil.


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
testDictionary["Sour"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Resultado da saída:
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 ponteiro, 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 matriz / listaoriginal
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Resultado da saída:
Original: 10 20
Reference: 10 20
Reference: 1000 2000
]]

Clonando Tabelas

Clones Superficiais

Para copiar uma tabela sem 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 à seguindo:


-- A função usada para cópia profunda de uma tabela
local function deepCopy(original)
-- Defina a nova tabela para a cópia
local copy = {}
-- Loop através da tabela original para clonar
for key, value in original do
-- Se o tipo do valor for uma tabela, cópia-o para a chave (índice)
-- Caso (ou) o tipo não seja uma tabela, atribua o valor padrão ao índice em vez disso
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Retorne a cópia finalizada da tabela clonada profunda
return copy
end

Com a função em local, você pode fazer uma cópia profunda como a seguinte:


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

Tabelas de Congelamento

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

Congelamento Superficial

Para congelar uma tabela sem 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

Congelamento Profundo

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


local function deepFreeze(target)
-- Colete a tabela em uma camada fina
table.freeze(target)
-- Verifique cada chave da tabela e congele-a se for uma tabela
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end

Com a função em local, você pode congelar uma tabela profundamente 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