Tipe data tabel dapat menyimpan banyak nilai dari jenis apa pun yang bukan , termasuk bilangan , angka , string , fungsi , dan tabel lainnya.Membangun tabel dengan kurungan bergelombang ( {} ):
-- Membangun tabel kosong yang ditugaskan ke variabel "t"local t = {}print(t) -- {}
Anda dapat menggunakan tabel sebagai array atau kamus.배열 menggunakan daftar angka yang diurutkan sebagai indeks, tetapi kamus dapat memiliki angka, string, dan objek sebagai indeks.
Untuk informasi lebih lanjut tentang fungsi bawaan untuk bekerja dengan tabel, lihat perpustakaan table.
Matriks
Sebuah array adalah daftar nilai yang diurutkan.배열 adalah berguna untuk menyimpan koleksi data, seperti kumpulan pemain dengan izin khusus.
Buat array
Untuk membuat array menggunakan tabel Luau, nyatakan nilai dalam urutan berurutan, dipisahkan oleh koma.
-- Membangun array dengan tiga itemlocal testArray = {"A string", 3.14159, true}print(testArray)
Baca dari array
Untuk membaca dari array, tambahkan pasangan kurung kotak setelah referensinya dan spesifikasikan nomor indeks elemen di dalamnya ( [pos] ):
-- Membangun array dengan tiga itemlocal testArray = {"A string", 3.14159, true}print(testArray[1]) -- Sebuah stringprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
Menulis ke array
Untuk mendefinisikan atau menulis ulang nilai array di indeks, nyatakan nomor indeks dalam tanda kurung persegi ( [index] ) diikuti dengan = dan nilai:
local testArray = {"A string", 3.14159, true}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
Berulang atas array
Untuk mengulangi atas array, Anda dapat menggunakan loop for .Karena array memiliki indeks numerik, Anda juga dapat menggunakan loop numerik for dari 1 ke panjang array ( #array ).
local testArray = {"A string", 3.14159, true, "New string"}-- Lingkaran menggunakan iterasi umumfor index, value in testArray doprint(index, value)end-- Berulang 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 Luau's table.insert() .
- 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]) -- String baruprint(testArray[4]) -- Another new string
Untuk menyisipkan item di antara awal dan akhir 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]) -- ITEM BARU #2print(testArray[3]) -- Next item
Hapus item
Untuk menghapus item dari array, gunakan table.remove() .Ini menghapus item di posisi yang ditentukan dan memindahkan item berikutnya kembali satu posisi indeks.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- Item pertamaprint(testArray[2]) -- Last item
Kamus
Kamus adalah ekstensi dari array. Kamus menyimpan serangkaian pasangan kunci-nilai, di mana kunci bisa menjadi angka, string, atau objek apa pun.
Buat kamus
Untuk membuat tabel kamus, definisikan setiap kunci diikuti oleh = dan nilai . Pisahkan setiap pasangan kunci-nilai dengan koma:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}
Kunci untuk kamus bisa menjadi angka, string, dan objek.Sebagai contoh, kunci juga bisa menjadi Instance.Untuk menggunakan objek sebagai kunci, nyatakan kunci dalam kurung kotak ( [key] ):
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}
Baca dari kamus
Untuk membaca dari kamus, tambahkan pasangan kurung setelah referensinya dan spesifikasikan nama kunci.Referensikan langsung kunci string menggunakan ( ["key"] ) atau ( .key ), atau sebagai gantinya gunakan nilai variabel ( [key] ).
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}-- Sertakan kutipan untuk kunci stringprint(testDictionary["partType"]) -- Blok-- Atau gunakan . untuk mengindeks kunci string tanpa spasiprint(testDictionary.partType) -- Blok-- Hilangkan kutipan untuk kunci non-stringprint(testDictionary[part]) -- true
Menulis ke kamus
Untuk mendefinisikan atau menulis ulang nilai kunci kamus baru atau 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 adatestDictionary["fruitName"] = "Cherry"testDictionary.sour = false-- Sisipkan pasangan kunci-nilai barutestDictionary.fruitCount = 10print(testDictionary.fruitName) -- Ceriprint(testDictionary.sour) -- salahprint(testDictionary.fruitCount) -- 10
Berulang atas kamus
Untuk mengulangi atas 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 kunci menjadi 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 itu.Sebagai gantinya, variabel menjadi referensi atau pointer ke tabel asli.Referensi ke tabel mencerminkan setiap perubahan pada 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])--[[ Hasil keluaran:Original: 10 20Reference: 10 20Reference: 1000 2000]]
Tabel klon
Klon dangkal
Untuk menyalin tabel tanpa tabel terkait, Luau menawarkan metode table.clone().
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
Klon mendalam
Untuk menyalin tabel yang lebih kompleks dengan tabel terkait di dalamnya, Anda perlu menggunakan fungsi recursif yang mirip dengan berikut:
-- Fungsi yang digunakan untuk kloning mendalam tabel
local function deepClone(original)
-- Definisikan tabel baru untuk salinan
local clone = table.clone(original)
-- Putar melalui tabel asli untuk memeriksa nilai tabel
-- Jika tabel ditemukan sebagai nilai, klon mendalam 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 mendalam
return clone
end
Dengan fungsi di tempat, Anda dapat membuat salinan mendalam sebagai berikut:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
Membekukan tabel
Membekukan tabel membuatnya menjadi hanya baca, yang berguna untuk membuat nilai konstan yang tidak ingin Anda ubah.Membeku permanen; tidak ada metode "pencairan" atau "pencairan" yang permanen.Untuk memeriksa apakah meja dibekukan, gunakan table.isfrozen() .
Membeku dangkal
Untuk membekukan tabel tanpa tabel terkait, 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
Membeku mendalam
Untuk membekukan tabel yang lebih kompleks dengan tabel terkait di dalamnya, gunakan fungsi recursif yang mirip dengan berikut:
local function deepFreeze(target)
-- Membekukan ringan meja
table.freeze(target)
-- Periksa setiap kunci dari tabel dan membekukannya jika itu adalah tabel
for _, value in target do
-- Pastikan nilainya tidak dibekukan; jika sudah, kesalahan akan terjadi
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(v)
end
end
end
Dengan fungsi di tempat, Anda dapat membekukan mendalam meja 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