Właściwości tabeli danych mogą przechować wiele wartości dowolnego typu, które nie są nil, w tym booleany, 2> liczby2>, 5> łańcuchy5>, 8> funkcje8> i inne tabeli. Konstruuj tabelki z podwójnymi nawiasami ( 1> 1>):
-- Zbuduj pusty stół przypisany zmiennej "t"local t = {}print(t) -- {}
Możesz używać tabeli jako 阵列 lub dictionnaire. Arrays używają listy liczb jako indeksy, ale słowniki mogą mieć liczby, strójne listy i obiekty jako indeksy.
For more information on built-in functions for working with tables, see the table library.
Materiały
массив jest listą sortowaną wartości. Masywy są użyteczne do przechowywania zbiorów danych, takich jak grupa graczy z specjalnymi uprawnieniami.
Tworzenie matryk
Aby utworzyć matrykę używając tabeli Luau, deklaruj wartości w kolejności, oddzielone przez przecinki.
-- Konstruuj wielokolorową matrykę z trzema elementamilocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray)
Czytanie z wymiarów
Aby przeczytać z wymiaru, dodaj pary nawiasów kuśników po jego odniesieniu i określ numer indeksu elementu wewnątrz ( [pos] ):
-- Konstruuj wielokolorową matrykę z trzema elementamilocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray[1]) -- ciągprint(testArray[2]) -- 3.14159print(testArray[3]) -- Camera
Pisanie do maszyny
Aby zdefiniować lub ponownie napisać wartość wiersza w indeksie, zaznacz numer indeksu w określonych nawiasach ([index] ) następnie = i wartość:
local testArray = {"A string", 3.14159, workspace.Camera}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Przeglądanie matryc
Aby przetworzyć wielokolorowy массив, możesz użyć pętli for. Ponieważ masz wielokolorowe wskaźniki, możesz również użyć liczbowego for pętli od 1 do długości maszyny (1># array1>).
local testArray = {"A string", 3.14159, workspace.Camera, "New string"}-- Pętla używająca ogólnej inkrementacjifor index, value in testArray doprint(index, value)end-- Przy użyciu operatora długości matryцы (#)for index = 1, #testArray doprint(index, testArray[index])end--[[ Wyświetlany wynik:1 A string2 3.141593 Camera4 New string1 A string2 3.141593 Camera4 New string]]
Układanie pozycji
Są dwa wbudowane sposoby na wstawienie pozycji na końcu end maszyny:
- Przekaż odniesienie do wartości wiersza i wartości przedmiotu do funkcji table.insert() Luau.
- Dodaj nowy pozycji do arkusza używając array[# array+1 >>>> syntax.
local testArray = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- Nowa ciągprint(testArray[4]) -- Another new string
Aby wstawić pozycję między początkiem i końcem wielu wymiarów, włącz wartość pozycji jako drugą argument table.insert() . To wstawia nową pozycję i nacisną następujące pozycje o jeden pozycji indeksu.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- Pierwszy przedmiotprint(testArray[2]) -- NOWY PRZEDMIOT #2print(testArray[3]) -- Next item
Usuwanie elementów
Aby usunąć pozycję z wymiaru, użyj table.remove(). To usuwa pozycję w określonym miejscu i przesuwa następne pozycje o jeden pozycji wskaźniku.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- Pierwszy przedmiotprint(testArray[2]) -- Last item
Słowniki
Słowniki są rozszerzeniem maszyny wątku. Słowniki przechowują zbiór pary klucz/wartość, gdzie klucze mogą być dowolną liczbą, ciąglub obiektem.
Tworzenie słowników
Aby utworzyć tabelę słownika, zdefiniuj każdą klucz następujący przez = i wartość . Rozdziel każdą p parę klucz-wartości 2>z przecinkiem2>.
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}
Klucze do słowników mogą być liczbami, łańcuchami i obiektami. Na przykład, klucz może być również Instance . Aby używać obiektów jako kluczy, deklaruj klucz w nawiasach kwadratowych ( [key] ):
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}
Czytanie z Dictionaries
Aby czytać z słownika, dodaj pary nawiasów po jego odniesieniu i określ nazwę klucza. bezpośrednio odniesienie się do klucza strungowego używając cytatów ( ["key"] ) lub użyj zmiennej wartości ( [key] ).
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}-- Włącz cytaty dla kluczy strunowychprint(testDictionary["PartType"]) -- Zablokuj-- Omituj cytaty dla kluczy niestringowychprint(testDictionary[part]) -- true
Pisanie do słowników
Aby zdefiniować lub ponownie napisać wartość nowego lub istniejącego klucza słownika, zaznacz nazwę klucza w nawiasach ( [key] ) następnie = i wartość:
local testDictionary = {FruitName = "Lemon",Sour = true}-- Zmień wartość istniejących kluczytestDictionary["FruitName"] = "Cherry"testDictionary["Sour"] = false-- Utwórz nową parę klucz-wartośćtestDictionary["FruitCount"] = 10print(testDictionary["FruitName"]) -- Wiśniaprint(testDictionary["Sour"]) -- fałszywyprint(testDictionary["FruitCount"]) -- 10
iterowanie nad słownikami
Aby przetworzyć słownik, użyj globalnej funkcji pairs() w pętli for:
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}for key, value in pairs(testDictionary) doprint(key, value)end--[[ Wyświetlany wynik:FruitName LemonSour trueFruitColor Yellow]]
Usuwanie pary kluczowych
Aby usunąć lub usunąć pary wartości kluczowych z słownika, ustaw jego wartość dla klucza na nil .
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}testDictionary["Sour"] = nilfor key, value in pairs(testDictionary) doprint(key, value)end--[[ Wyświetlany wynik:FruitName LemonFruitColor Yellow]]
Tabela jako odniesienie
Jeśli zapiszesz tabelę w nowej zmiennej, Luau nie tworzy kopii tej tabeli. Zamiast tego zmienne staje się odwołaniem lub wskazówką do oryginalnej tabeli. Każde odwołanie do tabeli odzwierciedla jakiekolwiek 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 oryginalnym массивеoriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ Wyświetlany wynik:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Klonowanie Tabel
Głębokie klony
Aby skopiować tabelę bez żadnych podmiotów w tabeli, 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 pędzącymi w nim tabelami, będziesz musiał użyć funkcji recursyjnej podobnej do obserwuje:
-- Funkcja używana do głębokiego kopiowania tabeli
local function deepCopy(original)
-- Definiuj nową tabelę dla kopii
local copy = {}
-- Przełącz się poprzez oryginalną tabelę, aby sklonować
for key, value in original do
-- Jeśli typ wartości jest tabelą, głęboko skopiuj go do klucza (indeksu)
-- Else (lub) typ nie jest tabelą, przypisz wartość domyślną dla indeksu
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Zwróć sklonowaną wersję głębokiej tabeli
return copy
end
Z funkcją w miejscemożesz zrobić głęboką kopię, która wygląda następująco:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepCopy(original)
Zamrażające Tabel
Zamrażanie stolika sprawia, że jest ono tylko czytelne, co jest użyteczne do tworzenia stałych wartości, które nie chcesz zmieniać. Zamrażanie jest stałe; nie ma metody "roz zamrażania" lub "roz zamrażania". Aby sprawdzić, czy stolik jest zamrożony, użyj table.isfrozen() .
Płytkie zamraża
Aby zamrozić tabelę bez żadnych podmiotów w tabeli, 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łęboki zamraż
Aby zamrozić bardziej złożony stół z wbudowanymi w nim stółami, użyj funkcji recursyjnej podobnej do obserwuje:
local function deepFreeze(target)
-- Pozwól tabeli się załamać
table.freeze(target)
-- Sprawdź każdy klucz w tabeli i zamroź go, jeśli jest to tabela
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end
Z funkcją w miejscemożesz 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