Tipe data table dapat menyimpan beberapa nilai dari tipe apa pun yang bukan nil, termasuk boolean, angka, string, fungsi, dan tabel lainnya. Buat tabel dengan menggunakan kurung kurawal ({}):
-- Buat tabel kosong yang ditugaskan ke variabel "t"local t = {}print(t) -- {}
Anda dapat menggunakan tabel sebagai array atau kamus. Array menggunakan daftar urut angka sebagai indeks, tetapi kamus dapat memiliki angka, string, dan objek sebagai indeks.
Untuk informasi lebih lanjut tentang fungsi bawaan untuk bekerja dengan tabel, lihat pustaka table.
Array
Sebuah array adalah daftar nilai yang terurut. Array berguna untuk menyimpan kumpulan data, seperti sekelompok pemain dengan izin khusus.
Buat array
Untuk membuat array menggunakan tabel Luau, nyatakan nilai-nilai dalam urutan berurutan, dipisahkan dengan koma.
-- Buat array dengan tiga itemlocal testArray = {"Sebuah string", 3.14159, true}print(testArray)
Baca dari array
Untuk membaca dari array, tambahkan sepasang kurung siku setelah referensinya dan tentukan nomor indeks elemen di dalamnya ([pos]):
-- Buat array dengan tiga itemlocal testArray = {"Sebuah string", 3.14159, true}print(testArray[1]) -- Sebuah stringprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
Tulis ke array
Untuk mendefinisikan atau menulis ulang nilai dari array pada indeks, nyatakan nomor indeks dalam kurung siku ([index]) diikuti dengan = dan nilai:
local testArray = {"Sebuah string", 3.14159, true}testArray[2] = 12345testArray[4] = "String baru"print(testArray[2]) -- 12345print(testArray[4]) -- String baru
Iterasi pada array
Untuk mengiterasi array, Anda dapat menggunakan loop for. Karena array memiliki indeks numerik, Anda juga dapat menggunakan loop for numerik dari 1 ke panjang array (#array).
local testArray = {"Sebuah string", 3.14159, true, "String baru"}-- Loop dengan iterasi umumfor index, value in testArray doprint(index, value)end-- Iterasi menggunakan operator panjang array (#)for index = 1, #testArray doprint(index, testArray[index])end
Sisipkan item
Ada dua cara bawaan untuk menyisipkan item ke akhir array:
- Berikan referensi ke array dan nilai item ke fungsi table.insert() milik Luau.
- Tambahkan item baru ke array menggunakan sintaks array[#array+1].
local testArray = {"Sebuah string", 3.14159}table.insert(testArray, "String baru")testArray[#testArray+1] = "String baru lainnya"print(testArray[3]) -- String baruprint(testArray[4]) -- String baru lainnya
Untuk menyisipkan item di antara awal dan akhir array, sertakan nilai posisi sebagai argumen kedua dari table.insert(). Ini menyisipkan item baru dan mendorong item berikutnya satu posisi indeks ke atas.
local testArray = {"Item pertama", "Item selanjutnya"}table.insert(testArray, 2, "ITEM BARU #2")print(testArray[1]) -- Item pertamaprint(testArray[2]) -- ITEM BARU #2print(testArray[3]) -- Item selanjutnya
Hapus item
Untuk menghapus item dari array, gunakan table.remove(). Ini menghapus item pada posisi yang ditentukan dan menggeser item berikutnya kembali satu posisi indeks.
local testArray = {"Item pertama", "Item selanjutnya", "Item terakhir"}table.remove(testArray, 2)print(testArray[1]) -- Item pertamaprint(testArray[2]) -- Item terakhir
Kamus
Kamus adalah ekstensi dari array. Kamus menyimpan sekumpulan pasangan kunci-nilai, di mana kunci dapat berupa angka, string, atau objek apa pun.
Buat kamus
Untuk membuat tabel kamus, definisikan setiap kunci diikuti dengan = dan nilai. Pisahkan setiap pasangan kunci-nilai dengan koma:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}
Kunci untuk kamus dapat berupa angka, string, dan objek. Misalnya, sebuah kunci juga dapat berupa Instance. Untuk menggunakan objek sebagai kunci, nyatakan kunci dalam kurung siku ([key]):
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}
Baca dari kamus
Untuk membaca dari kamus, tambahkan sepasang kurung setelah referensinya dan tentukan nama kunci. Secara langsung referensikan kunci string menggunakan (["key"]) atau (.key), atau gunakan nilai variabel ([key]).
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}-- Sertakan tanda kutip untuk kunci stringprint(testDictionary["partType"]) -- Block-- Atau gunakan . untuk mengindeks kunci string tanpa spasiprint(testDictionary.partType) -- Block-- Hilangkan tanda kutip untuk kunci non-stringprint(testDictionary[part]) -- true
Tulis ke kamus
Untuk mendefinisikan atau menulis ulang nilai dari kunci kamus baru atau yang sudah ada, nyatakan nama kunci dalam kurung ([key]) atau, jika kunci adalah string, gunakan (.key) diikuti dengan = dan nilai:
local testDictionary = {fruitName = "Lemon",sour = true}-- Ubah nilai kunci yang sudah adatestDictionary["fruitName"] = "Cherry"testDictionary.sour = false-- Sisipkan pasangan kunci-nilai barutestDictionary.fruitCount = 10print(testDictionary.fruitName) -- Cherryprint(testDictionary.sour) -- falseprint(testDictionary.fruitCount) -- 10
Iterasi pada kamus
Untuk mengiterasi kamus, gunakan loop for:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}for key, value in testDictionary doprint(key, value)end--[[ Hasil keluaran:fruitName Lemonsour truefruitColor Yellow]]
Hapus pasangan kunci-nilai
Untuk menghapus atau menghapus pasangan kunci-nilai dari kamus, atur nilainya untuk sebuah kunci ke nil.
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ Hasil keluaran:fruitName LemonfruitColor Yellow]]
Tabel sebagai referensi
Jika Anda menyimpan tabel dalam variabel baru, Luau tidak membuat salinan tabel tersebut. Sebaliknya, variabel tersebut menjadi referensi, atau penunjuk, ke tabel asli. Setiap referensi ke tabel mencerminkan setiap perubahan pada tabel asli:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Asli:", originalArray[1], originalArray[2])print("Referensi:", arrayReference[1], arrayReference[2])-- Ubah nilai di array aslioriginalArray[1] = 1000originalArray[2] = 2000print("Referensi:", arrayReference[1], arrayReference[2])--[[ Hasil keluaran:Asli: 10 20Referensi: 10 20Referensi: 1000 2000]]
Menyalin tabel
Klon dangkal
Untuk menyalin tabel tanpa tabel bersarang, 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 bersarang di dalamnya, Anda perlu menggunakan fungsi rekursif yang mirip dengan berikut:
-- Fungsi yang digunakan untuk klon dalam sebuah tabel
local function deepClone(original)
-- Definisikan tabel baru untuk salinan
local clone = table.clone(original)
-- Loop melalui tabel asli untuk memeriksa nilai tabel
-- Jika tabel ditemukan sebagai nilai, klon dalam ke kunci (indeks)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Kembalikan salinan akhir dari tabel klon dalam
return clone
end
Dengan fungsi ini di tempatnya, Anda dapat membuat salinan dalam sebagai berikut:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "NamaPemain"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Bekukan tabel
Membekukan tabel menjadikannya hanya-baca, yang berguna untuk membuat nilai konstan yang tidak ingin Anda ubah. Pembekuan bersifat permanen; tidak ada metode "unfreeze" atau "thaw". Untuk memeriksa apakah tabel dibekukan, gunakan table.isfrozen().
Bekuan dangkal
Untuk membekukan tabel tanpa tabel bersarang, Luau menawarkan metode table.freeze().
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> percobaan untuk memodifikasi tabel yang hanya-baca
Bekuan dalam
Untuk membekukan tabel yang lebih kompleks dengan tabel bersarang di dalamnya, gunakan fungsi rekursif yang mirip dengan berikut:
local function deepFreeze(target)
-- Bekukan tabel
table.freeze(target)
-- Periksa setiap kunci tabel dan bekukan jika itu adalah tabel
for _, value in target do
-- Pastikan nilai tidak dibekukan; jika sudah, akan terjadi kesalahan
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end
Dengan fungsi ini di tempatnya, Anda dapat membekukan tabel dalam sebagai berikut:
local target = {key = "value",playerInfo = {playerID = 505306092,playerName = "NamaPemain"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> percobaan untuk memodifikasi tabel yang hanya-baca