Typ danych tabeli może przechowywać wiele wartości dowolnego typu, które nie są , w tym booliany , liczby , struny , funkcje i inne tabele.Twórz tabele z zakrzywionymi nawiasami ( {} ):
-- Zbuduj pusty stół przypisany zmiennej "t"local t = {}print(t) -- {}
Możesz używać tabeli jako matrycy lub słownika.Tablice używają uporządkowanej listy liczb jako indeksów, ale słowniki mogą mieć liczby, ciągi i obiekty jako indeksy.
Aby uzyskać więcej informacji o wbudowanych funkcjach do pracy z tablicami, zobacz bibliotekę table .
Matryce
Matryca jest uporządkowaną listą wartości.Matryce są przydatne do przechowywania kolekcji danych, takich jak grupa graczy z specjalnymi uprawnieniami.
Twórz tablice Utwórz tablice
Aby utworzyć tablicę za pomocą tabeli Luau, zadeklaruj wartości w kolejności sekwencyjnej, oddzielone przecinkami.
-- Zbuduj tablicę z trzema elementamilocal testArray = {"A string", 3.14159, true}print(testArray)
Czytaj z tablicami
Aby odczytać z matrycy, dodaj parę kwadratowych nawiasów po jej odniesieniu i określ numer indeksu elementu wewnątrz ( [pos] ):
-- Zbuduj tablicę z trzema elementamilocal testArray = {"A string", 3.14159, true}print(testArray[1]) -- Sznurprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
Napisz do matryc
Aby określić lub zmienić wartość tablicy na indeksie, oznacz numer indeksu w nawiasach kwadratowych ( [index] ) po którym następuje = i wartość:
local testArray = {"A string", 3.14159, true}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Powtarzaj nad matrycami
Aby powtarzać nad matrycą, możesz użyć pętli for.Ponieważ tablice mają indeksy liczbowe, możesz również użyć numerowej pętle for od 1 do długości tablicy (#array).
local testArray = {"A string", 3.14159, true, "New string"}-- Pętla używająca ogólnej iteracjifor index, value in testArray doprint(index, value)end-- Powtarzaj za pomocą operatora długości matrycy (#)for index = 1, #testArray doprint(index, testArray[index])end
Wstawiaj przedmioty
Istnieją dwa wbudowane sposoby wstawienia przedmiotu do końca arraya :
- Przekaż odniesienie do tablicy i wartość przedmiotu do funkcji Luau's table.insert() .
- Dodaj nowy element do matrycy za pomocą syntaxu array[#array+1].
local testArray = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- Nowa strunaprint(testArray[4]) -- Another new string
Aby wstawić przedmiot między początkiem a końcem matrycy, włącz wartość pozycji jako drugi argument table.insert().Wstawia to nowy element i przesuwa następujące elementy o jedną pozycję indeksu w górę.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- Pierwszy elementprint(testArray[2]) -- NOWY PRZEDMIOT #2print(testArray[3]) -- Next item
Usuń przedmioty
Aby usunąć przedmiot z matrycy, użyj table.remove().W ten sposób usuwa przedmiot w określonej pozycji i przenosi wszystkie następne przedmioty o jedną pozycję indeksu wstecz.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- Pierwszy elementprint(testArray[2]) -- Last item
Słowniki
Słowniki są rozszerzeniem tablic. Słowniki przechowują zestaw pary klucz-wartość, w którym klucze mogą być dowolną liczbą, ciągiem lub obiektem.
Twórz słowniki
Aby utworzyć tabelę słownika, określ każdą kluczową klucz połączony z = i wartością . Oddziel każdą parę klucz-wartość za pomocą przecinka:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}
Klucze do słowników mogą być liczby, ciągi i obiekty.Na przykład klucz może być również Instance.Aby używać obiektów jako kluczy, oświadcz klucz w nawiasach kwadratowych ( [key] ):
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}
Czytaj z słowników
Aby odczytać z słownika, dodaj parę nawiasów po jego odniesieniu i określ nazwę klucza.Bezpośrednio odwołaj klucz strun za pomocą (["key"] lub (.key), lub zamiast tego użyj wartości zmiennej ([key]).
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}-- Włącz cytaty dla kluczy strunowychprint(testDictionary["partType"]) -- Zablokuj-- Lub użyj ., aby indeksować klucze ciągów bez spacjiprint(testDictionary.partType) -- Zablokuj-- Pomiń cytaty dla kluczy nietekstowychprint(testDictionary[part]) -- true
Napisz do słowników
Aby określić lub zmienić wartość klucza nowego lub istniejącego słownika, oświadcz nazwę klucza w nawiasach ( [key] ) lub, jeśli klucz jest ciągiem, użyj ( .key ), a następnie = i wartość:
local testDictionary = {fruitName = "Lemon",sour = true}-- Zmień wartość istniejących kluczytestDictionary["fruitName"] = "Cherry"testDictionary.sour = false-- Wstaw nową parę klucz-wartośćtestDictionary.fruitCount = 10print(testDictionary.fruitName) -- Wiśniaprint(testDictionary.sour) -- fałszprint(testDictionary.fruitCount) -- 10
Powtarzaj nad słownikami
Aby powtórzyć się nad słownikiem, użyj pętli for:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}for key, value in testDictionary doprint(key, value)end--[[ Wynikowe wyjście:fruitName Lemonsour truefruitColor Yellow]]
Usuń pary klucz-wartość
Aby usunąć lub skasować parę klucz-wartość z słownika, ustaw jej wartość dla klucza na nil .
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ Wynikowe wyjście:fruitName LemonfruitColor Yellow]]
Tabele jako odniesienia
Jeśli przechowujesz tabelę w nowej zmiennej, Luau nie tworzy kopii tej tabeli.Zamiast tego zmienna staje się odniesieniem referencji lub wskazówką do oryginalnego stołu.Każde odniesienie do tabeli odzwierciedla wszelkie zmiany w oryginalnej tabeli:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- Zmień wartości w oryginalnej matrycyoriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ Wynikowe wyjście:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Klonuj tabele
Płytkie klony
Aby skopiować tabelę bez żadnych podnestowanych tabel, Luau oferuje metodę table.clone().
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Głębokie klony
Aby skopiować bardziej złożony stół z wewnętrznymi tablicami w nim, musisz użyć funkcji recursywnej podobnej do następującej:
-- Funkcja używana do głębokiego klonowania tabeli
local function deepClone(original)
-- Określ nową tabelę dla kopii
local clone = table.clone(original)
-- Pętla przez oryginalną tabelę, aby sprawdzić wartości tabeli
-- Jeśli tabela zostanie znaleziona jako wartość, głęboko sklonuj ją do klucza (indeksu)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Zwróć skończoną kopię głęboko sklonowanej tabeli
return clone
end
Z funkcją w miejscu możesz wykonać głęboką kopię w następujący sposób:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Zamrażanie stołów
Zamrażenie tabeli czyni ją odczytywalną, co jest przydatne do tworzenia stałych wartości, których nie chcesz zmieniać.Mrożenie jest stałe; nie ma metody "odmrażania" lub "roztapiania".Aby sprawdzić, czy stół jest zamrożony, użyj table.isfrozen().
Głębokie zamrażanie
Aby zamrozić tabelę bez żadnych tabel pośrednich, Luau oferuje metodę table.freeze().
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> attempt to modify a readonly table
Głębokie zamrażanie
Aby zamrozić bardziej złożony stół z wewnętrznymi tablicami w nim, użyj funkcji rekurencyjnej podobnej do następującej:
local function deepFreeze(target)
-- Płytkie zamrożenie stołu
table.freeze(target)
-- Sprawdź każdy klucz w tabeli i zamroź go, jeśli jest to tabela
for _, value in target do
-- Upewnij się, że wartość nie jest zamrożona; jeśli już jest, wystąpi błąd
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(v)
end
end
end
Z funkcją w miejscu możesz głęboko zamrozić tabelę w następujący sposób:
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