Tabele

*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 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 elementami
local 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 elementami
local testArray = {"Ciąg", 3.14159, true}
print(testArray[1]) -- Ciąg
print(testArray[2]) -- 3.14159
print(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] = 12345
testArray[4] = "Nowy ciąg"
print(testArray[2]) --12345
print(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 iteracji
for index, value in testArray do
print(index, value)
end
-- Iterowanie używając operatora długości tablicy (#)
for index = 1, #testArray do
print(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ąg
print(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 element
print(testArray[2]) -- NOWY ELEMENT #2
print(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 element
print(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 string
print(testDictionary["partType"]) -- Blok
-- Lub użyj . do indeksowania kluczy stringowych bez spacji
print(testDictionary.partType) -- Blok
-- Omij cudzysłowy dla kluczy nie-stringowych
print(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 kluczy
testDictionary["fruitName"] = "Wiśnia"
testDictionary.sour = false
-- Wstaw nową parę klucz-wartość
testDictionary.fruitCount = 10
print(testDictionary.fruitName) -- Wiśnia
print(testDictionary.sour) -- false
print(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 do
print(key, value)
end
--[[ Wynik wychodzący:
fruitName Cytryna
sour true
fruitColor Żół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 = nil
for key, value in testDictionary do
print(key, value)
end
--[[ Wynik wychodzący:
fruitName Cytryna
fruitColor Żół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 = originalArray
print("Oryginalna:", originalArray[1], originalArray[2])
print("Odwołanie:", arrayReference[1], arrayReference[2])
-- Zmień wartości w oryginalnej tablicy
originalArray[1] = 1000
originalArray[2] = 2000
print("Odwołanie:", arrayReference[1], arrayReference[2])
--[[ Wynik wychodzący:
Oryginalna: 10 20
Odwołanie: 10 20
Odwoł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
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.