Tabeller som ordbøger
Brug strengnøgler og blandede nøgler til at gemme nøgleværdi-par.
Tabeller som ordbøger er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.
Strengnøgler
Tabeller med strengnøgler fungerer som ordbøger (hash-tabeller). Du tilgår felter med punktnotationen t.key (for gyldige identifikatorer) eller kantet parentes-notationen t["key"] (for enhver streng). De to former er ækvivalente; kantet parentes-notation understøtter dynamiske nøgler.
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-litteraler
Ordbøger kan initialiseres med en tabel-literal ved hjælp af syntaksen key = value. Dette er den mest almindelige måde at oprette poster på i Lua. Du kan blande array-lignende og ordbogs-lignende elementer i den samme 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]) -- webTælling med ordbøger
En klassisk anvendelse af ordbøger er frekvenstælling. Gennemløb en liste, brug hvert element som en nøgle, og forøg tælleren. Kontrollér, om værdien er nil, før du forøger den — brug count[word] or 0 som startværdi.
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 1Gruppering med ordbøger
Gruppér data efter en egenskab: Gennemløb listen, og brug grupperingsnøglen til at føje elementer til en liste i en ordbog. Dette svarer i Lua til SQL's GROUP BY eller Pythons defaultdict-mønster.
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, CarolKontrol af, om en nøgle findes
Test, om en nøgle findes, ved at sammenligne dens værdi med nil. Vær opmærksom på, at hvis værdien, der er gemt under en nøgle, er nil, betragtes nøglen som fraværende. Til tilstedeværelsesflag skal du gemme true som værdien i stedet for 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")
endSletning af nøgler
Sæt en tabelnøgle til nil for at fjerne den. Nøgle-værdi-parret forsvinder, og garbage collectoren kan frigive værdien fra hukommelsen. Du kan ikke slette en lokal variabel på denne måde — kun tabelposter.
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) -- 2Sammenfletning af ordbøger
Sammenflet to tabeller ved at gennemløbe den ene og kopiere dens poster til den anden. Hvis begge har den samme nøgle, vinder værdien fra den anden tabel. Dette svarer i Lua til JavaScripts 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 trueEnhver nøgletype
Tabelnøgler kan være enhver værdi, der hverken er nil eller NaN: strenge, tal, boolske værdier, funktioner og endda andre tabeller. Heltalsnøgler og strengnøgler gemmes forskelligt internt, men tilgås ensartet med kantet parentes-notation.
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]) -- 4Sorteret gennemløb
Luas pairs() garanterer ikke rækkefølgen af gennemløbet. Hvis du vil gennemløbe i en bestemt rækkefølge, skal du samle nøglerne i et array, sortere det og derefter gennemløbe det.
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)Mønster med standardværdier
Et nyttigt mønster er en tabel med "standardværdier", der tilgås via en __index-metatabel. Når en nøgle ikke findes i hovedtabellen, slår Lua den op i tabellen med standardværdier. Det muliggør lagdelt konfiguration uden sammenfletning.
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)Hurtigt tjek
Hvordan fjerner du nøglen "x" fra tabellen t i Lua?
Opsamling: Tabeller som ordbøger
Vigtige punkter:
- Punkt- og kantet parentes-notation:
t.key==t["key"] - Enhver værdi, der hverken er nil eller NaN, kan være en nøgle
- Sæt en nøgle til nil for at slette den
- Frekvenstælling:
t[k] = (t[k] or 0) + 1 - Sorteret gennemløb: saml nøgler → sortér → gennemløb
- Brug en __index-metatabel til standardværdier
Lær Lua med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 40
- Lektioner
- 159
Ofte stillede spørgsmål
Er lektionen “Tabeller som ordbøger” gratis?
Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Tabeller som ordbøger”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Tabeller som ordbøger”?
Brug strengnøgler og blandede nøgler til at gemme nøgleværdi-par. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lua Academy?
Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Tabeller som ordbøger”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lua Academy-lektion?
Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Tabeller som arrays
- Tabeller som ordbøger
- Iteration gennem tabeller med pairs og ipairs
- Indlejrede tabeller og strukturerede data