Lua Academy · Les

Tables als woordenboeken

Gebruik string- en gemengde sleutels om sleutel-waardeparen op te slaan

Les 2 van 412 stappen

Tables als woordenboeken is een gratis Lua Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.

Sleutels van het type tekenreeks

Tabellen met tekenreekssleutels werken als woordenboeken (hashmaps). Benader velden met puntnotatie t.key (voor geldige identifiers) of blokhaken t["key"] (voor elke tekenreeks). Beide vormen zijn gelijkwaardig; met blokhaken kun je dynamische sleutels gebruiken.

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)

Tabel-literals

Je kunt woordenboeken initialiseren met een tabel-literal met de syntaxis key = value. Dit is de meest gebruikelijke manier om records te maken in Lua. Je kunt array-achtige en woordenboekachtige items in één literal combineren.

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

Tellen met woordenboeken

Een klassiek gebruik van een woordenboek is het tellen van frequenties. Loop over een lijst, gebruik elk element als sleutel en verhoog de telling. Controleer vóór het verhogen op nil — gebruik count[word] or 0 als beginwaarde.

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

Groeperen met woordenboeken

Gegevens groeperen op basis van een eigenschap: loop over de lijst en gebruik de groepssleutel om items toe te voegen aan een lijst in een woordenboek. Dit is het Lua-equivalent van SQL GROUP BY of het patroon met Python's defaultdict.

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

Controleren of een sleutel bestaat

Test of een sleutel bestaat door de waarde ervan te vergelijken met nil. Let op: als de opgeslagen waarde van een sleutel wel nil is, wordt de sleutel als afwezig beschouwd. Sla voor aanwezigheidsvlaggen de waarde true op in plaats van 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

Sleutels verwijderen

Stel een tabelsleutel in op nil om deze te verwijderen. Het sleutel-waardepaar verdwijnt en de garbagecollector kan het geheugen van de waarde terugwinnen. Je kunt een lokale variabele niet op deze manier verwijderen — alleen tabelitems.

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

Woordenboeken samenvoegen

Voeg twee tabellen samen door over de ene te itereren en de items ervan naar de andere te kopiëren. Als beide dezelfde sleutel hebben, wint de waarde uit de tweede tabel. Dit is het Lua-equivalent van JavaScript's Object.assign.

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

Elk type sleutel

Tabelsleutels kunnen elke waarde zijn die niet nil of NaN is: tekenreeksen, getallen, booleans, functies en zelfs andere tabellen. Gehele getallen en tekenreeksen worden intern verschillend opgeslagen, maar je benadert ze op dezelfde manier met blokhaken.

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

Geordend itereren

Lua's pairs() garandeert geen iteratievolgorde. Als je in een bepaalde volgorde wilt itereren, verzamel je de sleutels in een array, sorteer je die en itereer je er vervolgens over.

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)

Patroon voor standaardwaarden

Een nuttig patroon is een tabel met "standaardwaarden" die via de metatabel __index wordt geraadpleegd. Als een sleutel niet in de hoofdtabel wordt gevonden, zoekt Lua deze op in de tabel met standaardwaarden. Zo kun je configuratie in lagen opbouwen zonder tabellen samen te voegen.

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)

Korte controle

Hoe verwijder je in Lua de sleutel "x" uit tabel t?

Samenvatting: tabellen als woordenboeken

Belangrijkste punten:

  • Punt- en blokhakennotatie: t.key == t["key"]
  • Elke waarde die niet nil of NaN is, kan een sleutel zijn
  • Stel een sleutel in op nil om deze te verwijderen
  • Frequenties tellen: t[k] = (t[k] or 0) + 1
  • Geordend itereren: sleutels verzamelen → sorteren → itereren
  • Gebruik de __index-metatabel voor standaardwaarden
Gratis beginnen

Leer Lua met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Tables als woordenboeken” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Tables als woordenboeken”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.

Wat leer ik in “Tables als woordenboeken”?

Gebruik string- en gemengde sleutels om sleutel-waardeparen op te slaan Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Lua Academy te beginnen?

Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Tables als woordenboeken”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Lua Academy?

Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Tables als arrays
  2. Tables als woordenboeken
  3. Tables doorlopen met pairs en ipairs
  4. Geneste tables en gestructureerde gegevens
← Terug naar Lua Academy