Tabeller som ordbøker
Bruk tekststrenger og blandede nøkler til å lagre nøkkel-verdi-par.
Tabeller som ordbøker er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Nøkler av typen string
Tabeller med nøkler av typen string fungerer som ordbøker (hash maps). Få tilgang til felt ved hjelp av punktnotasjon t.key (for gyldige identifikatorer) eller hakeparentesnotasjon t["key"] (for alle strenger). Begge formene er ekvivalente, men hakeparentesnotasjon støtter dynamiske nøkler.
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)Tabell-literaler
Ordbøker kan initialiseres med en tabell-literal ved hjelp av syntaksen key = value. Dette er den vanligste måten å opprette records på i Lua. De kan blande oppføringer i array-stil og ordbok-stil i 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]) -- webTelling med ordbøker
Et klassisk bruksområde for ordbøker er frekvenstelling. Iterer over en liste, bruk hvert element som en nøkkel, og øk telleren. Sjekk om verdien er nil før De øker den – bruk count[word] or 0 som startverdi.
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øker
Gruppér data etter en egenskap: Iterer over listen og bruk grupperingsnøkkelen til å legge elementer til i en liste i en ordbok. Dette tilsvarer SQL GROUP BY eller mønsteret med Python-ordbokens defaultdict i Lua.
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, CarolKontrollere om en nøkkel finnes
Test om en nøkkel finnes ved å sammenligne verdien med nil. Vær forsiktig: Hvis verdien som er lagret på en nøkkel er nil, regnes nøkkelen som fraværende. For tilstedeværelsesflagg bør De lagre true som verdi 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")
endSlette nøkler
Sett en tabellnøkkel til nil for å fjerne den. Nøkkel-verdi-paret forsvinner, og søppelryddingen kan frigjøre minnet som verdien brukte. De kan ikke slette en lokal variabel på denne måten – bare tabelloppføringer.
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) -- 2Slå sammen ordbøker
Slå sammen to tabeller ved å iterere over den ene og kopiere oppføringene til den andre. Hvis begge har samme nøkkel, vinner verdien fra den andre tabellen. Dette tilsvarer JavaScripts Object.assign i Lua.
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 trueAlle nøkkeltyper
Tabellnøkler kan være alle verdier som ikke er nil eller NaN: strenger, tall, boolske verdier, funksjoner og til og med andre tabeller. Heltallsnøkler og strengnøkler lagres forskjellig internt, men nås på samme måte med hakeparentesnotasjon.
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]) -- 4Sortert iterasjon
Luas pairs() garanterer ikke rekkefølgen ved iterasjon. Hvis De vil iterere i en bestemt rekkefølge, samler De nøklene i en tabell, sorterer den og itererer deretter.
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 for standardverdier
Et nyttig mønster er en tabell med «defaults» som nås via metatabellens __index. Når en nøkkel ikke finnes i hovedtabellen, slår Lua den opp i tabellen med standardverdier. Dette muliggjør lagdelt konfigurasjon uten sammenslåing.
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)Sjekk raskt
Hvordan fjerner De nøkkelen "x" fra tabellen t i Lua?
Oppsummering: Tabeller som ordbøker
Viktige punkter:
- Punkt- og hakeparentesnotasjon:
t.key==t["key"] - Alle verdier som ikke er nil eller NaN, kan være en nøkkel
- Sett en nøkkel til nil for å slette den
- Frekvenstelling:
t[k] = (t[k] or 0) + 1 - Sortert iterasjon: samle nøkler → sorter → iterer
- Bruk en __index-metatabell for standardverdier
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Tabeller som ordbøker» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Tabeller som ordbøker», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Tabeller som ordbøker»?
Bruk tekststrenger og blandede nøkler til å lagre nøkkel-verdi-par. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Tabeller som ordbøker»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Tabeller som arrayer
- Tabeller som ordbøker
- Iterere over tabeller med pairs og ipairs
- Nestede tabeller og strukturerte data