Jenis data tabel dapat menyimpan beberapa nilai dari setiap jenis yang bukan nil, termasuk booleans, 1> angka1>, 4> string4>, 7> fungsi7>, dan tabel lainnya. Konstruksi tabel dengan huruf miring ( 0> 0>):
-- Membangun tabel kosong yang ditugaskan ke variabel "t"local t = {}print(t) -- {}
Anda dapat menggunakan tabel sebagai array atau dictionary . Arrays menggunakan daftar urutan angka sebagai indeks, tetapi典典 dapat memiliki angka, string, dan objek sebagai indeks.
Untuk informasi lebih lanjut tentang fungsi bawaan untuk bekerja dengan tabel, lihat table library.
Matriks
array adalah daftar yang diurutkan dari nilai. Arrays berguna untuk menyimpan koleksi data, seperti kumpulan pemain dengan izin khusus.
Membuat Matriks
Untuk membuat matriks menggunakan tabel Luau, declare the values in sequential order, separated by commas.
-- Bangun matri dengan tiga itemlocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray)
Membaca dari Arrays
Untuk membaca dari array, tambahkan beberapa huruf kurung setelah referensinya dan spesifikasi nomor indeks elemen di dalam ( [pos] ):
-- Bangun matri dengan tiga itemlocal testArray = {"A string", 3.14159, workspace.Camera}print(testArray[1]) -- Sebuah stringprint(testArray[2]) -- 3.14159print(testArray[3]) -- Camera
Menulis ke Arrays
Untuk mendefinisikan atau menulis ulang nilai array di sebuah indeks, tulis nomor indeks dalam tanda kurung brunggu ([index] ) diikuti dengan = dan nilai:
local testArray = {"A string", 3.14159, workspace.Camera}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Mengulangi atas Arrays
Untuk mengulangi atas matriks, Anda dapat menggunakan for loop. Karena matriks memiliki indeks numerik, Anda juga dapat menggunakan for loop numerik dari 1 ke panjang matriks ( 2># array2> ).
local testArray = {"A string", 3.14159, workspace.Camera, "New string"}-- Loop menggunakan umumnya iterasifor index, value in testArray doprint(index, value)end-- Iterate menggunakan operator panjang array (#)for index = 1, #testArray doprint(index, testArray[index])end--[[ HasilOutput:1 A string2 3.141593 Camera4 New string1 A string2 3.141593 Camera4 New string]]
Menempatkan Item
Ada dua cara bawaan untuk menyisipkan item ke ujung dari matriks:
- Mengembalikan referensi ke item dan nilai array ke fungsi table.insert() Luau.
- Tambahkan item baru ke array menggunakan syntax array[#array+1] .
local testArray = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- Tali stringprint(testArray[4]) -- Another new string
Untuk menyisipkan item di antara awal dan akhir dari array, termasuk nilai posisi sebagai argumen kedua dari table.insert() . Ini menyisipkan item baru dan mendorong item berikut ke satu posisi indeks.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- Item pertamaprint(testArray[2]) -- BARANG BARU #2print(testArray[3]) -- Next item
Menghapus Item
Untuk menghapus item dari matriks, gunakan table.remove() . Ini menghapus item di posisi yang ditentukan dan menyesuaikan posisi item berikutnya satu posisi indeks.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- Item pertamaprint(testArray[2]) -- Last item
Daftar kata
Diksi adalah ekstensi dari array. Diksi menyimpan set kunci-nilai, di mana kunci dapat menjadi nomor apa pun, string atau objek.
Membuat Kamus
Untuk membuat tabel dictionary, definisikan setiap kunci yang diikuti oleh = dan value . Separate setiap pas value dengan koma:
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}
Kunci untuk典典Instance dapat menjadi angka, string, dan objek. Misalnya, kunci mungkin juga menjadi Instance. Untuk menggunakan objek sebagai kunci, declare the key dalam huruf besar ( [key] ):
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}
Membaca dari Dictionaries
Untuk membaca dari kamus, tambahkan beberapa huruf kutip setelah referensinya dan spesifikasikan nama kunci. Secara langsung mengacu pada string kunci menggunakan kurungan ( ["key"] ) atau menggunakan nilai variabel ( [key] ).
local part = Instance.new("Part")local testDictionary = {PartType = "Block",[part] = true}-- Masukkan kutipan untuk kunci stringprint(testDictionary["PartType"]) -- Blok-- Hilangkan kutipan untuk kunci non-stringprint(testDictionary[part]) -- true
Menulis ke Dictionaries
Untuk mendefinisikan atau menulis ulang nilai kunci典典 baru atau sudah ada, katakan nama kunci di dalam brackets ( [key] ) setelah = dan nilai:
local testDictionary = {FruitName = "Lemon",Sour = true}-- Mengubah nilai kunci yang adatestDictionary["FruitName"] = "Cherry"testDictionary["Sour"] = false-- Sisipkan pasangan nilai kunci barutestDictionary["FruitCount"] = 10print(testDictionary["FruitName"]) -- Ceriprint(testDictionary["Sour"]) -- benarprint(testDictionary["FruitCount"]) -- 10
Mitering over Dictionaries
Untuk mengulangi di atas definisi, gunakan fungsi global pairs() dalam lingkaran for :
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}for key, value in pairs(testDictionary) doprint(key, value)end--[[ HasilOutput:FruitName LemonSour trueFruitColor Yellow]]
Menghapus Pasangan Key-Value
Untuk menghapus atau menghapus pasangan nilai dari kamus, tetapkan nilainya untuk kunci nil .
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}testDictionary["Sour"] = nilfor key, value in pairs(testDictionary) doprint(key, value)end--[[ HasilOutput:FruitName LemonFruitColor Yellow]]
Tabel sebagai Referensi
Jika Anda menyimpan tabel di variabel baru, Luau tidak menciptakan salinan tabel itu. Sebaliknya, variabel menjadi referensi , atau poin, ke tabel asli. Setiap referensi ke tabel mengandalkan perubahan ke tabel asli:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- Ubah nilai dalam array aslioriginalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ HasilOutput:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Mengkloning Tabel
Klon Permukaan
Untuk menyalin tabel tanpa tabel yang terbuktu, Luau menawarkan metode table.clone() .
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Klon Dalam
Untuk menyalin tabel yang lebih kompleks dengan tabel terbalik di dalamnya, Anda akan perlu menggunakan fungsi recursive yang mirip dengan mengikuti:
-- Fungsi yang digunakan untuk mengkloning tabel secara dalam
local function deepCopy(original)
-- Definisikan tabel baru untuk copy
local copy = {}
-- Loop melalui tabel asli untuk klon
for key, value in original do
-- Jika jenis nilai adalah tabel, salinan dalam tabel ke kunci (indeks)
-- Else (atau) jenis bukan tabel, atur nilai default ke indeks
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Kembalikan salinan tabel klon dalam tabelan yang diselesaikan
return copy
end
Dengan fungsi di tempat, Anda dapat membuat salinan dalam ruangan sebagai berikut:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepCopy(original)
Meja Beku
Menyimpan tabel membuatnya hanya baca, yang berguna untuk membuat nilai konstan yang tidak ingin Andaubah. Menyimpan permanen; tidak ada metode "unfreeze" atau "thaw". Untuk memeriksa apakah tabel dibekukan, gunakan table.isfrozen() .
Membeku Flat
Untuk membekukan tabel tanpa tabel yang terbuktu, Luau menawarkan metode table.freeze() .
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> attempt to modify a readonly table
Beku Dalam
Untuk membekukan tabel yang lebih kompleks dengan tabel terbuktu di dalamnya, gunakan fungsi recursive yang mirip dengan mengikuti:
local function deepFreeze(target)
-- Lemparkan tabel ke bawah
table.freeze(target)
-- Periksa setiap kunci tabel dan membekukannya jika itu tabel
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end
Dengan fungsi ini, Anda dapat membekukan tabel sebagai berikut:
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