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 item
local 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 item
local testArray = {"Sebuah string", 3.14159, true}
print(testArray[1]) -- Sebuah string
print(testArray[2]) -- 3.14159
print(testArray[3]) -- trueTulis 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] = 12345
testArray[4] = "String baru"
print(testArray[2]) -- 12345
print(testArray[4]) -- String baruIterasi 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 umum
for index, value in testArray do
print(index, value)
end
-- Iterasi menggunakan operator panjang array (#)
for index = 1, #testArray do
print(index, testArray[index])
endSisipkan 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 baru
print(testArray[4]) -- String baru lainnyaUntuk 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 pertama
print(testArray[2]) -- ITEM BARU #2
print(testArray[3]) -- Item selanjutnyaHapus 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 pertama
print(testArray[2]) -- Item terakhirKamus
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 string
print(testDictionary["partType"]) -- Block
-- Atau gunakan . untuk mengindeks kunci string tanpa spasi
print(testDictionary.partType) -- Block
-- Hilangkan tanda kutip untuk kunci non-string
print(testDictionary[part]) -- trueTulis 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 ada
testDictionary["fruitName"] = "Cherry"
testDictionary.sour = false
-- Sisipkan pasangan kunci-nilai baru
testDictionary.fruitCount = 10
print(testDictionary.fruitName) -- Cherry
print(testDictionary.sour) -- false
print(testDictionary.fruitCount) -- 10Iterasi pada kamus
Untuk mengiterasi kamus, gunakan loop for:
local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
for key, value in testDictionary do
print(key, value)
end
--[[ Hasil keluaran:
fruitName Lemon
sour true
fruitColor 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 = nil
for key, value in testDictionary do
print(key, value)
end
--[[ Hasil keluaran:
fruitName Lemon
fruitColor 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 = originalArray
print("Asli:", originalArray[1], originalArray[2])
print("Referensi:", arrayReference[1], arrayReference[2])
-- Ubah nilai di array asli
originalArray[1] = 1000
originalArray[2] = 2000
print("Referensi:", arrayReference[1], arrayReference[2])
--[[ Hasil keluaran:
Asli: 10 20
Referensi: 10 20
Referensi: 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
endDengan 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-bacaBekuan 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
endDengan 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