Tabel Bertingkat dan Data Terstruktur
Bangun struktur bertingkat dan akses bidang yang berada jauh di dalamnya.
Tabel Bertingkat dan Data Terstruktur adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Dasar-Dasar Tabel Bersarang
Tabel dapat berisi tabel lain sebagai nilai, sehingga membentuk struktur dengan kedalaman yang tidak terbatas. Akses bidang bersarang dengan merangkai notasi titik atau kurung siku. Tabel perantara yang tidak ada akan menyebabkan galat — selalu pastikan tabel induk ada sebelum mengakses bidang yang lebih dalam.
local company = {
name = "CoddyKit",
address = {
city = "Istanbul",
country = "Turkey",
zip = "34000"
},
employees = 25
}
print(company.name) -- CoddyKit
print(company.address.city) -- Istanbul
print(company["address"]["zip"]) -- 34000Akses Mendalam yang Aman
Mengakses bidang pada nilai nil menyebabkan program berhenti dengan galat "attempt to index a nil value". Cegah hal ini dengan hubungan arus pendek and: t and t.a and t.a.b. Beberapa basis kode mendefinisikan pembantu get(t, ...) yang menelusuri rangkaian kunci dengan aman.
local function get(t, ...)
local cur = t
for _, key in ipairs({...}) do
if type(cur) ~= "table" then return nil end
cur = cur[key]
end
return cur
end
local data = {user = {profile = {age = 30}}}
print(get(data, "user", "profile", "age")) -- 30
print(get(data, "user", "missing", "field")) -- nilLarik Rekaman
Pola yang umum adalah larik berisi tabel (rekaman). Setiap elemen adalah tabel dengan bidang bernama. Lakukan iterasi dengan ipairs dan akses bidang berdasarkan namanya. Ini adalah padanan Lua untuk larik objek atau daftar struktur.
local users = {
{id=1, name="Alice", score=95},
{id=2, name="Bob", score=87},
{id=3, name="Carol", score=91},
}
for _, user in ipairs(users) do
print(user.id, user.name, user.score)
endMembangun Tabel Bersarang secara Dinamis
Bangun struktur bersarang secara bertahap dengan membuat tabel bagian dalam sesuai kebutuhan. Selalu inisialisasi tabel sebelum menyisipkan sesuatu ke dalamnya. Kesalahan yang umum adalah lupa membuat tabel bagian dalam terlebih dahulu, lalu mencoba mengindeks nil.
local tree = {}
tree.root = {value = 10}
tree.root.left = {value = 5}
tree.root.right = {value = 15}
tree.root.left.left = {value = 2}
print(tree.root.value) -- 10
print(tree.root.left.value) -- 5
print(tree.root.left.left.value) -- 2Tabel sebagai Konfigurasi Mirip JSON
Tabel Lua sering digunakan untuk berkas konfigurasi, serupa dengan JSON atau YAML. Berkas tersebut mengembalikan sebuah tabel, lalu aplikasi memuatnya dengan dofile() atau require(). Tabel bersarang merepresentasikan bagian konfigurasi yang juga bersarang.
-- config.lua (returned table)
local config = {
server = {
host = "0.0.0.0",
port = 8080,
ssl = false,
},
db = {
host = "localhost",
name = "appdb",
pool_size = 10,
},
logging = { level = "info", file = "/var/log/app.log" }
}
print(config.server.port) -- 8080
print(config.db.pool_size) -- 10Graf sebagai Daftar Ketetanggaan
Representasikan graf sebagai tabel berisi tabel: setiap kunci adalah simpul, dan nilainya adalah daftar tetangga. Representasi daftar ketetanggaan ini hemat memori untuk graf renggang dan mudah digunakan di Lua.
local graph = {
A = {"B", "C"},
B = {"A", "D"},
C = {"A", "D"},
D = {"B", "C"},
}
-- BFS from A
local visited = {A=true}
local queue = {"A"}
while #queue > 0 do
local node = table.remove(queue, 1)
io.write(node .. " ")
for _, neighbor in ipairs(graph[node]) do
if not visited[neighbor] then
visited[neighbor] = true
queue[#queue+1] = neighbor
end
end
end
print() -- A B C DMengubah Bidang Bersarang
Ubah bidang bersarang dengan mengakses tabel induk dan menetapkan nilai pada kuncinya. Karena tabel diteruskan berdasarkan referensi, fungsi apa pun yang menerima tabel dapat mengubah isinya secara langsung — pemanggil akan melihat perubahan tersebut.
local player = {name="Hero", stats={hp=100, mp=50, atk=20}}
local function takeDamage(p, dmg)
p.stats.hp = math.max(0, p.stats.hp - dmg)
end
takeDamage(player, 35)
print(player.stats.hp) -- 65
player.stats.atk = player.stats.atk + 5
print(player.stats.atk) -- 25Membuat Serialisasi Tabel Bersarang
Mengonversi tabel bersarang menjadi string berguna untuk penelusuran galat atau pencatatan. Serializer rekursif sederhana dapat menangani kedalaman apa pun, tetapi tidak dapat menangani siklus (referensi melingkar).
local function serialize(val, indent)
indent = indent or 0
local pad = string.rep(" ", indent)
if type(val) ~= "table" then
return tostring(val)
end
local parts = {"{"}
for k, v in pairs(val) do
parts[#parts+1] = pad.." "..tostring(k).."="..serialize(v,indent+1)
end
parts[#parts+1] = pad.."}"
return table.concat(parts, "\n")
end
local data = {x=1, nested={y=2, z=3}}
print(serialize(data))Matriks Renggang
Menyimpan matriks 2D secara naif memboroskan memori untuk masukan renggang berukuran besar. Simpan hanya entri yang bukan nol dalam tabel bersarang: matrix[row][col] = value. Cara ini dapat merepresentasikan matriks yang sangat besar secara efisien saat sebagian besar nilainya nol.
local function newMatrix()
return setmetatable({}, {__index=function(t,k)
local row = {}
rawset(t, k, row)
return row
end})
end
local m = newMatrix()
m[1][1] = 5
m[3][7] = 12
m[100][200] = 99
print(m[1][1]) -- 5
print(m[3][7]) -- 12
print(m[2][5]) -- nil (sparse: no value)Pemeriksaan Kesetaraan Mendalam
Tabel dibandingkan berdasarkan referensi dengan ==, bukan berdasarkan nilai. Untuk membandingkan tabel bersarang secara struktural, tulis fungsi kesetaraan rekursif yang membandingkan setiap pasangan kunci-nilai dan melakukan rekursi ke tabel bersarang.
local function deepEqual(a, b)
if type(a) ~= type(b) then return false end
if type(a) ~= "table" then return a == b end
for k, v in pairs(a) do
if not deepEqual(v, b[k]) then return false end
end
for k in pairs(b) do
if a[k] == nil then return false end
end
return true
end
print(deepEqual({1,{2,3}},{1,{2,3}})) -- true
print(deepEqual({1,{2,3}},{1,{2,4}})) -- falsePemeriksaan Singkat
Apa yang terjadi saat Anda mengakses t.a.b dan t.a adalah nil?
Ringkasan: Tabel Bersarang
Ringkasan:
- Tabel dapat bersarang tanpa batas:
t.a.b.c - Lindungi akses mendalam:
t and t.a and t.a.b - Tabel adalah jenis referensi — fungsi mengubahnya secara langsung
- Larik rekaman:
{{name=...},{name=...}} - Matriks renggang: tabel bersarang untuk efisiensi memori
- Kesetaraan mendalam memerlukan perbandingan rekursif
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Tabel Bertingkat dan Data Terstruktur” gratis?
Ya — teks lengkap “Tabel Bertingkat dan Data Terstruktur” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Tabel Bertingkat dan Data Terstruktur”?
Bangun struktur bertingkat dan akses bidang yang berada jauh di dalamnya. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Tabel Bertingkat dan Data Terstruktur” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Tabel sebagai Larik
- Tabel sebagai Kamus
- Melakukan Iterasi pada Tabel dengan pairs dan ipairs
- Tabel Bertingkat dan Data Terstruktur