Tabel

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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 item
local 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 item
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- Sebuah string
print(testArray[2]) -- 3.14159
print(testArray[3]) -- Camera

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] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(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 iterasi
for index, value in testArray do
print(index, value)
end
-- Iterate menggunakan operator panjang array (#)
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ HasilOutput:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 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 string
print(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 pertama
print(testArray[2]) -- BARANG BARU #2
print(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 pertama
print(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 string
print(testDictionary["PartType"]) -- Blok
-- Hilangkan kutipan untuk kunci non-string
print(testDictionary[part]) -- true

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 ada
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- Sisipkan pasangan nilai kunci baru
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- Ceri
print(testDictionary["Sour"]) -- benar
print(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) do
print(key, value)
end
--[[ HasilOutput:
FruitName Lemon
Sour true
FruitColor 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"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ HasilOutput:
FruitName Lemon
FruitColor 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 = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Ubah nilai dalam array asli
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ HasilOutput:
Original: 10 20
Reference: 10 20
Reference: 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