Typ danych tabela może przechowywać wiele wartości dowolnego typu, który nie jest nil, w tym wartości logiczne, liczby, ciągi, funkcje i inne tabele. Twórz tabele używając klamrowych nawiasów ({}):
-- Tworzenie pustej tabeli przypisanej do zmiennej "t"local t = {}print(t) -- {}
Możesz używać tabeli jako tablicy lub słownika. Tablice używają uporządkowanej listy liczb jako indeksów, natomiast słowniki mogą mieć jako indeksy liczby, ciągi oraz obiekty.
Aby uzyskać więcej informacji na temat wbudowanych funkcji do pracy z tabelami, zobacz bibliotekę table.
Tablice
Tablica to uporządkowana lista wartości. Tablice są przydatne do przechowywania zbiorów danych, takich jak grupa graczy z specjalnymi uprawnieniami.
Tworzenie tablic
Aby stworzyć tablicę używając tabeli Luau, zadeklaruj wartości w kolejności, oddzielając je przecinkami.
-- Tworzenie tablicy z trzema elementamilocal testArray = {"Ciąg", 3.14159, true}print(testArray)
Odczyt z tablic
Aby odczytać wartość z tablicy, dodaj parę nawiasów kwadratowych po jej odwołaniu i określ numer indeksu elementu wewnątrz ([pos]):
-- Tworzenie tablicy z trzema elementamilocal testArray = {"Ciąg", 3.14159, true}print(testArray[1]) -- Ciągprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
Zapisywanie do tablic
Aby zdefiniować lub przedefiniować wartość tablicy w danym indeksie, zadeklaruj numer indeksu w nawiasach kwadratowych ([index]), po którym następuje = i wartość:
local testArray = {"Ciąg", 3.14159, true}testArray[2] = 12345testArray[4] = "Nowy ciąg"print(testArray[2]) --12345print(testArray[4]) -- Nowy ciąg
Iterowanie po tablicach
Aby iterować po tablicy, możesz użyć pętli for. Ponieważ tablice mają numeryczne indeksy, możesz również użyć numerycznej pętli for od 1 do długości tablicy (#array).
local testArray = {"Ciąg", 3.14159, true, "Nowy ciąg"}-- Pętla używająca ogólnej iteracjifor index, value in testArray doprint(index, value)end-- Iterowanie używając operatora długości tablicy (#)for index = 1, #testArray doprint(index, testArray[index])end
Wstawianie elementów
Istnieją dwa wbudowane sposoby wstawiania elementu na koniec tablicy:
- Przekaż odniesienie do tablicy oraz wartość elementu do funkcji table.insert().
- Dodaj nowy element do tablicy używając składni array[#array+1].
local testArray = {"Ciąg", 3.14159}table.insert(testArray, "Nowy ciąg")testArray[#testArray+1] = "Inny nowy ciąg"print(testArray[3]) -- Nowy ciągprint(testArray[4]) -- Inny nowy ciąg
Aby wstawić element między początek a koniec tablicy, dołącz wartość pozycji jako drugi argument do table.insert(). To wstawia nowy element i przesuwa następujące elementy o jeden indeks w górę.
local testArray = {"Pierwszy element", "Następny element"}table.insert(testArray, 2, "NOWY ELEMENT #2")print(testArray[1]) -- Pierwszy elementprint(testArray[2]) -- NOWY ELEMENT #2print(testArray[3]) -- Następny element
Usuwanie elementów
Aby usunąć element z tablicy, użyj table.remove(). To usuwa element na określonej pozycji i przesuwa pozostałe elementy o jeden indeks w dół.
local testArray = {"Pierwszy element", "Następny element", "Ostatni element"}table.remove(testArray, 2)print(testArray[1]) -- Pierwszy elementprint(testArray[2]) -- Ostatni element
Słowniki
Słowniki są rozszerzeniem tablic. Słowniki przechowują zestaw par klucz-wartość, gdzie klucze mogą być dowolną liczbą, ciągiem lub obiektem.
Tworzenie słowników
Aby stworzyć tabelę słownika, zdefiniuj każdy klucz po którym następuje = i wartość. Oddziel każdą parę klucz-wartość przecinkiem:
local testDictionary = {fruitName = "Cytryna",fruitColor = "Żółty",sour = true}
Klucze dla słowników mogą być liczbami, ciągami i obiektami. Na przykład klucz może być również Instance. Aby używać obiektów jako kluczy, zadeklaruj klucz w nawiasach kwadratowych ([key]):
local part = Instance.new("Part")local testDictionary = {partType = "Blok",[part] = true}
Odczyt ze słowników
Aby odczytać ze słownika, dodaj parę nawiasów po jego odniesieniu i określ nazwę klucza. Bezpośrednio odniesiesz się do klucza ciągu używając (["key"]) lub (.key), lub zamiast tego użyj wartości zmiennej ([key]).
local part = Instance.new("Part")local testDictionary = {partType = "Blok",[part] = true}-- Dołącz cudzysłowy dla kluczy stringprint(testDictionary["partType"]) -- Blok-- Lub użyj . do indeksowania kluczy stringowych bez spacjiprint(testDictionary.partType) -- Blok-- Omij cudzysłowy dla kluczy nie-stringowychprint(testDictionary[part]) -- true
Zapisywanie do słowników
Aby zdefiniować lub przedefiniować wartość nowego lub istniejącego klucza w słowniku, zadeklaruj nazwę klucza w nawiasach ([key]) lub, jeśli klucz jest ciągiem, użyj (.key) po którym następuje = i wartość:
local testDictionary = {fruitName = "Cytryna",sour = true}-- Zmień wartość istniejących kluczytestDictionary["fruitName"] = "Wiśnia"testDictionary.sour = false-- Wstaw nową parę klucz-wartośćtestDictionary.fruitCount = 10print(testDictionary.fruitName) -- Wiśniaprint(testDictionary.sour) -- falseprint(testDictionary.fruitCount) -- 10
Iterowanie po słownikach
Aby iterować po słowniku, użyj pętli for:
local testDictionary = {fruitName = "Cytryna",fruitColor = "Żółty",sour = true}for key, value in testDictionary doprint(key, value)end--[[ Wynik wychodzący:fruitName Cytrynasour truefruitColor Żółty]]
Usuwanie par klucz-wartość
Aby usunąć lub wymazać parę klucz-wartość z słownika, ustaw jej wartość dla klucza na nil.
local testDictionary = {fruitName = "Cytryna",fruitColor = "Żółty",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ Wynik wychodzący:fruitName CytrynafruitColor Żółty]]
Tabele jako odniesienia
Jeśli przechowujesz tabelę w nowej zmiennej, Luau nie tworzy kopii tej tabeli. Zamiast tego zmienna staje się odniesieniem, lub wskaźnikiem do oryginalnej tabeli. Każde odniesienie do tabeli odzwierciedla wszelkie zmiany w oryginalnej tabeli:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Oryginalna:", originalArray[1], originalArray[2])print("Odwołanie:", arrayReference[1], arrayReference[2])-- Zmień wartości w oryginalnej tablicyoriginalArray[1] = 1000originalArray[2] = 2000print("Odwołanie:", arrayReference[1], arrayReference[2])--[[ Wynik wychodzący:Oryginalna: 10 20Odwołanie: 10 20Odwołanie: 1000 2000]]
Klonowanie tabel
Płytkie klony
Aby skopiować tabelę bez zagnieżdżonych tabel, Luau oferuje metodę table.clone().
local original = {key = "wartość",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Głębokie klony
Aby skopiować bardziej złożoną tabelę z zagnieżdżonymi tabelami wewnątrz, musisz użyć funkcji rekurencyjnej podobnej do następującej:
-- Funkcja używana do głębokiego klonowania tabeli
local function deepClone(original)
-- Zdefiniuj nową tabelę dla kopii
local clone = table.clone(original)
-- Iteruj przez oryginalną tabelę, aby sprawdzić wartości tabel
-- Jeśli znajdziesz tabelę jako wartość, głęboko klonuj ją do klucza (indeksu)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Zwróć sfinalizowaną kopię głęboko sklonowanej tabeli
return clone
end
Mając funkcję, możesz wykonać głęboką kopię w następujący sposób:
local original = {key = "wartość",playerInfo = {playerID = 505306092,playerName = "NazwaGracza"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Zamrażanie tabel
Zamrożenie tabeli sprawia, że jest ona tylko do odczytu, co jest przydatne do tworzenia stałych wartości, których nie chcesz zmieniać. Zamrożenie jest trwałe; nie ma metody "odmrożenia" ani "rozmrażania". Aby sprawdzić, czy tabela jest zamrożona, użyj table.isfrozen().
Płytkie zamrożenia
Aby zamrozić tabelę bez zagnieżdżonych tabel, Luau oferuje metodę table.freeze().
local target = {key = "wartość",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> próba modyfikacji tabeli tylko do odczytu
Głębokie zamrożenia
Aby zamrozić bardziej złożoną tabelę z zagnieżdżonymi tabelami wewnątrz, użyj funkcji rekurencyjnej podobnej do następującej:
local function deepFreeze(target)
-- Płytkie zamrożenie tabeli
table.freeze(target)
-- Sprawdź każdy klucz tabeli i zamroź go, jeśli jest tabelą
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(value)
end
end
end
Mając funkcję, możesz głęboko zamrozić tabelę w następujący sposób:
local target = {key = "wartość",playerInfo = {playerID = 505306092,playerName = "NazwaGracza"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> próba modyfikacji tabeli tylko do odczytu