0Pricing
Lua Academy · Pelajaran

Tabel sebagai Kamus

Gunakan kunci string dan campuran untuk menyimpan pasangan kunci-nilai.

Tabel sebagai Kamus adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Kunci String

Tabel dengan kunci string berfungsi sebagai kamus (peta hash). Akses bidang menggunakan notasi titik t.key (untuk pengenal yang valid) atau notasi kurung siku t["key"] (untuk string apa pun). Kedua bentuk ini setara; notasi kurung siku mendukung kunci dinamis.

local user = {}
user.name = "Alice"
user["age"] = 30
user.role = "admin"

print(user.name)        -- Alice
print(user["age"])      -- 30

local field = "role"
print(user[field])      -- admin (dynamic key)

Literal Tabel

Kamus dapat diinisialisasi dengan literal tabel menggunakan sintaks key = value. Ini adalah cara yang paling umum untuk membuat rekaman di Lua. Anda dapat mencampur entri bergaya larik dan bergaya kamus dalam satu literal.

local config = {
  host = "localhost",
  port = 3306,
  database = "myapp",
  debug = false,
  tags = {"web", "api"},  -- nested array
}

print(config.host)        -- localhost
print(config.port)        -- 3306
print(config.tags[1])     -- web

Menghitung dengan Kamus

Salah satu penggunaan klasik kamus adalah menghitung frekuensi. Lakukan iterasi pada sebuah daftar, gunakan setiap elemen sebagai kunci, lalu tambah penghitungnya. Periksa nil sebelum menambah — gunakan count[word] or 0 sebagai nilai awal.

local words = {"lua","is","fast","lua","is","lua"}
local freq = {}

for _, w in ipairs(words) do
  freq[w] = (freq[w] or 0) + 1
end

for word, count in pairs(freq) do
  print(word, count)
end
-- lua 3, is 2, fast 1

Mengelompokkan dengan Kamus

Untuk mengelompokkan data berdasarkan properti: lakukan iterasi pada daftar dan gunakan kunci pengelompokan untuk menambahkan item ke daftar dalam kamus. Ini adalah padanan Lua untuk GROUP BY di SQL atau pola defaultdict di Python.

local people = {
  {name="Alice", dept="eng"},
  {name="Bob",   dept="hr"},
  {name="Carol", dept="eng"},
  {name="Dave",  dept="hr"},
}
local groups = {}

for _, p in ipairs(people) do
  local d = p.dept
  groups[d] = groups[d] or {}
  groups[d][#groups[d]+1] = p.name
end

print(table.concat(groups.eng, ", "))  -- Alice, Carol

Memeriksa Keberadaan Kunci

Uji apakah suatu kunci ada dengan membandingkan nilainya dengan nil. Berhati-hatilah: jika nilai yang disimpan pada suatu kunci adalah nil, kunci tersebut dianggap tidak ada. Untuk penanda keberadaan, simpan true sebagai nilai, bukan nil.

local cache = {result=42, mode="fast"}

if cache.result ~= nil then
  print("cached:", cache.result)  -- 42
end

-- Key not present:
if cache.timeout == nil then
  print("no timeout set")
end

-- Membership set pattern
local allowed = {admin=true, editor=true}
if allowed["admin"] then
  print("access granted")
end

Menghapus Kunci

Atur kunci tabel menjadi nil untuk menghapusnya. Pasangan kunci-nilai tersebut menghilang dan pengumpul sampah dapat mengambil kembali memori nilainya. Anda tidak dapat menghapus variabel lokal dengan cara ini — hanya entri tabel.

local session = {token="abc123", user="Alice", expires=3600}
print(session.token)   -- abc123

session.token = nil
print(session.token)   -- nil (removed)

-- Count remaining keys
local count = 0
for _ in pairs(session) do count = count + 1 end
print(count)   -- 2

Menggabungkan Kamus

Gabungkan dua tabel dengan melakukan iterasi pada salah satunya dan menyalin entrinya ke tabel yang lain. Jika keduanya memiliki kunci yang sama, nilai dari tabel kedua yang digunakan. Ini adalah padanan Lua untuk Object.assign milik JavaScript.

local defaults = {color="blue", size=12, bold=false}
local overrides = {color="red", italic=true}

local function merge(base, over)
  local result = {}
  for k, v in pairs(base) do result[k] = v end
  for k, v in pairs(over) do result[k] = v end
  return result
end

local opts = merge(defaults, overrides)
print(opts.color, opts.size, opts.italic)  -- red 12 true

Jenis Kunci Apa Pun

Kunci tabel dapat berupa nilai apa pun yang bukan nil dan bukan NaN: string, angka, boolean, fungsi, bahkan tabel lain. Kunci bilangan bulat dan kunci string disimpan secara berbeda secara internal, tetapi diakses secara seragam dengan notasi kurung siku.

local t = {}
local function myKey() end

t["string"] = 1
t[42] = 2
t[true] = 3
t[myKey] = 4

print(t["string"])  -- 1
print(t[42])        -- 2
print(t[true])      -- 3
print(t[myKey])     -- 4

Iterasi Berurutan

pairs() milik Lua tidak menjamin urutan iterasi. Untuk melakukan iterasi dalam urutan yang ditentukan, kumpulkan kunci ke dalam larik, urutkan, lalu lakukan iterasi.

local scores = {Alice=95, Bob=87, Carol=91, Dave=78}

local names = {}
for name in pairs(scores) do
  names[#names+1] = name
end
table.sort(names)

for _, name in ipairs(names) do
  print(name, scores[name])
end
-- Alice 95, Bob 87, Carol 91, Dave 78 (sorted)

Pola Nilai Bawaan

Pola yang berguna adalah tabel "defaults" yang diakses melalui metatabel __index. Jika suatu kunci tidak ditemukan di tabel utama, Lua mencarinya di tabel bawaan. Dengan demikian, konfigurasi berlapis dapat dibuat tanpa penggabungan.

local defaults = {timeout=30, retries=3, verbose=false}
local config = {timeout=60}

setmetatable(config, {__index = defaults})

print(config.timeout)  -- 60  (overridden)
print(config.retries)  -- 3   (from defaults)
print(config.verbose)  -- false (from defaults)

Pemeriksaan Singkat

Bagaimana cara menghapus kunci "x" dari tabel t di Lua?

Ringkasan: Tabel sebagai Kamus

Poin penting:

  • Notasi titik dan kurung siku: t.key == t["key"]
  • Nilai apa pun yang bukan nil dan bukan NaN dapat menjadi kunci
  • Atur menjadi nil untuk menghapus kunci
  • Penghitungan frekuensi: t[k] = (t[k] or 0) + 1
  • Iterasi berurutan: kumpulkan kunci → urutkan → lakukan iterasi
  • Gunakan metatabel __index untuk nilai bawaan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tabel sebagai Kamus” gratis?

Ya — teks lengkap “Tabel sebagai Kamus” 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 sebagai Kamus”?

Gunakan kunci string dan campuran untuk menyimpan pasangan kunci-nilai. 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 2 dari 4.

Berapa lama pelajaran “Tabel sebagai Kamus” 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

  1. Tabel sebagai Larik
  2. Tabel sebagai Kamus
  3. Melakukan Iterasi pada Tabel dengan pairs dan ipairs
  4. Tabel Bertingkat dan Data Terstruktur
← Kembali ke Lua Academy