Lua Academy · leksjon

Tabeller som ordbøker

Bruk tekststrenger og blandede nøkler til å lagre nøkkel-verdi-par.

Leksjon 2 av 412 trinn

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])     -- web

Telling 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 1

Gruppering 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, Carol

Kontrollere 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")
end

Slette 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)   -- 2

Slå 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 true

Alle 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])     -- 4

Sortert 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
Gratis å komme i gang

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

  1. Tabeller som arrayer
  2. Tabeller som ordbøker
  3. Iterere over tabeller med pairs og ipairs
  4. Nestede tabeller og strukturerte data
← Tilbake til Lua Academy