Iterere over tabeller med pairs og ipairs
Gå trygt gjennom tabeller ved hjelp av pairs() og ipairs().
Iterere over tabeller med pairs og ipairs er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 3 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.
ipairs: Iterasjon over arrayer i rekkefølge
ipairs(t) itererer over heltallssekvensen som starter ved indeks 1, og gir par av typen (index, value). Den stopper ved den første nil-verdien. Dette er det trygge og forutsigbare valget for array-lignende tabeller der rekkefølgen er viktig.
local fruits = {"apple","banana","cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherrypairs: Alle nøkler
pairs(t) itererer over hvert ikke-nil nøkkel-verdi-par i tabellen, i en uspesifisert rekkefølge. Internt bruker den funksjonen next(). Bruk pairs for ordbøker, blandede tabeller eller når De må besøke alle nøkler uavhengig av type.
local info = {name="Lua", version=5.4, embedded=true}
for k, v in pairs(info) do
print(k, v)
end
-- name Lua
-- version 5.4
-- embedded true (order may vary)Velge mellom pairs og ipairs
Bruk ipairs for sekvensielle arrayer (garantert rekkefølge, stopper ved nil). Bruk pairs for ordbøker, blandede tabeller eller når De trenger alle nøkler. Det fungerer å bruke pairs på en array, men rekkefølgen er ikke garantert. Hvis De bruker ipairs på en ordbok, blir ikke-heltallsnøkler utelatt.
local mixed = {10, 20, label="hello", 30}
-- ipairs: only sees 10, 20, 30 in order
for i, v in ipairs(mixed) do
io.write(v .. " ")
end
print() -- 10 20 30
-- pairs: sees everything
for k, v in pairs(mixed) do
print(k, v)
endTelle elementer
For sekvenser gir #t antallet elementer. For ordbøker er #t upålitelig – iterer med pairs og tell manuelt. Dette er et viktig skille som forebygger feil når De arbeider med blandede tabeller eller tabeller med strengnøkler.
local arr = {10, 20, 30}
print("#arr:", #arr) -- 3 (reliable)
local dict = {a=1, b=2, c=3}
print("#dict:", #dict) -- 0 (unreliable for dicts!)
local count = 0
for _ in pairs(dict) do count = count + 1 end
print("count:", count) -- 3Endre verdier under iterasjon
De kan trygt oppdatere verdien til en eksisterende nøkkel mens De itererer med pairs. Det å legge til eller fjerne nøkler under iterasjon har imidlertid udefinert oppførsel. Samle endringene og utfør dem etter løkken.
local prices = {apple=1.0, banana=0.5, cherry=2.0}
-- Safe: update existing values
for k, v in pairs(prices) do
prices[k] = v * 1.1 -- 10% markup
end
for k, v in pairs(prices) do
print(k, string.format("%.2f", v))
endSamle nøkler
En vanlig operasjon er å samle alle nøkler i en sortert tabell for deterministisk utdata. Iterer med pairs for å samle nøklene, og bruk deretter table.sort til å sortere dem.
local config = {host="localhost", port=8080, debug=true}
local keys = {}
for k in pairs(config) do
keys[#keys+1] = k
end
table.sort(keys)
for _, k in ipairs(keys) do
print(k, "=", config[k])
end
-- debug = true
-- host = localhost
-- port = 8080Iterasjon over nestede tabeller
For nestede tabeller (tabeller med tabeller) kombinerer De to løkker: Den ytre løkken itererer over det øverste nivået, og den indre løkken itererer over hver nestede tabell. Dette mønsteret håndterer alle dybder ved hjelp av rekursjon, også helt vilkårlig nesting.
local matrix = {
{1,2,3},
{4,5,6},
{7,8,9},
}
for i, row in ipairs(matrix) do
for j, val in ipairs(row) do
io.write(string.format("%3d", val))
end
print()
endFiltrering med ipairs
Bygg en filtrert liste ved å iterere med ipairs og legge til elementer som oppfyller et predikat. Resultatet er en ny array som bare inneholder de samsvarende elementene.
local function filter(t, pred)
local result = {}
for _, v in ipairs(t) do
if pred(v) then result[#result+1] = v end
end
return result
end
local nums = {1,2,3,4,5,6,7,8,9,10}
local evens = filter(nums, function(n) return n % 2 == 0 end)
print(table.concat(evens, " ")) -- 2 4 6 8 10Mapping med ipairs
Bruk en transformasjon på hvert element: Iterer og bygg en ny array med de transformerte verdiene. Dette tilsvarer map() i funksjonelle programmeringsspråk.
local function map(t, fn)
local result = {}
for i, v in ipairs(t) do
result[i] = fn(v)
end
return result
end
local nums = {1, 2, 3, 4, 5}
local doubled = map(nums, function(n) return n * 2 end)
print(table.concat(doubled, " ")) -- 2 4 6 8 10
local words = {"hello","world"}
local upper = map(words, string.upper)
print(table.concat(upper, " ")) -- HELLO WORLDpairs med egendefinerte iteratorer
De kan gjøre et egendefinert objekt itererbart ved å returnere en iterator og tilstand fra en funksjon. Mønsteret gjenspeiler hvordan pairs fungerer internt: Den returnerer next, t, nil. Iteratorfabrikken Deres returnerer på samme måte en funksjon samt en valgfri tilstand.
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({"x","y","z"}) do
print(v)
end
-- x
-- y
-- zSjekk raskt
Hva er riktig om pairs() sammenlignet med ipairs()?
Oppsummering: pairs og ipairs
Oppsummering:
ipairs: sortert, heltallsnøkler fra og med 1, stopper ved nilpairs: alle nøkler, vilkårlig rekkefølge, stopper aldri tidlig- Bruk
pairsfor ordbøker ogipairsfor arrayer - Legg aldri til eller fjern nøkler midt i en pairs-iterasjon; det er trygt å oppdatere eksisterende verdier
- Samle og sorter nøkler for deterministisk utdata
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 «Iterere over tabeller med pairs og ipairs» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Iterere over tabeller med pairs og ipairs», 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 «Iterere over tabeller med pairs og ipairs»?
Gå trygt gjennom tabeller ved hjelp av pairs() og ipairs(). 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 3 av 4.
Hvor lang tid tar leksjonen «Iterere over tabeller med pairs og ipairs»?
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