Tabelki

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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 elementami
local 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 elementami
local testArray = {"A string", 3.14159, true}
print(testArray[1]) -- Sznur
print(testArray[2]) -- 3.14159
print(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] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(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 iteracji
for index, value in testArray do
print(index, value)
end
-- Powtarzaj za pomocą operatora długości matrycy (#)
for index = 1, #testArray do
print(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 struna
print(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 element
print(testArray[2]) -- NOWY PRZEDMIOT #2
print(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 element
print(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 strunowych
print(testDictionary["partType"]) -- Zablokuj
-- Lub użyj ., aby indeksować klucze ciągów bez spacji
print(testDictionary.partType) -- Zablokuj
-- Pomiń cytaty dla kluczy nietekstowych
print(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 kluczy
testDictionary["fruitName"] = "Cherry"
testDictionary.sour = false
-- Wstaw nową parę klucz-wartość
testDictionary.fruitCount = 10
print(testDictionary.fruitName) -- Wiśnia
print(testDictionary.sour) -- fałsz
print(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 do
print(key, value)
end
--[[ Wynikowe wyjście:
fruitName Lemon
sour true
fruitColor 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 = nil
for key, value in testDictionary do
print(key, value)
end
--[[ Wynikowe wyjście:
fruitName Lemon
fruitColor 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 = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Zmień wartości w oryginalnej matrycy
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Wynikowe wyjście:
Original: 10 20
Reference: 10 20
Reference: 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