Dynamiske lister med ArrayList
La en allocator-støttet buffer vokse.
Dynamiske lister med ArrayList er en gratis leksjon i Zig Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Zig Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Zig Academy inneholder totalt 4 leksjoner.
En buffer som kan vokse
Noen ganger kjenner De ikke størrelsen på forhånd. std.ArrayList er en dynamisk tabell som vokser når De legger til elementer, og som bruker en allokator. 📈
Den er generisk
ArrayList er en generisk type: De angir elementtypen én gang og får en liste som bare inneholder denne typen, med full typesikkerhet.
const List = std.ArrayList(i32);Opprett den med init
De oppretter en liste med init og gir den allokatoren den skal bruke til å vokse. Allokatoren følger listen gjennom hele levetiden.
var list = std.ArrayList(i32).init(allocator);Bruk alltid deinit
En liste eier minne på heapen, så kombiner init med deinit for å frigjøre det. En defer rett etter init gjør oppryddingen automatisk.
var list = std.ArrayList(i32).init(a);
defer list.deinit();Legg til elementer
Legg til ett element med append. Det kan bli nødvendig å utvide bufferen, så operasjonen kan mislykkes og kalles derfor med try.
try list.append(7);Få tilgang til dataene
Det gjeldende innholdet ligger i slicen .items. De leser, indekserer og itererer over denne slicen akkurat som over enhver annen Zig-slice.
for (list.items) |n| std.debug.print("{}\n", .{n});Lengde og kapasitet
length er list.items.len: hvor mange verdier De har lagret. Kapasiteten er den reserverte plassen, som kan være større for å unngå hyppige utvidelser.
Reserver på forhånd
Hvis De kjenner omtrent hvor stor listen blir, kan De først kalle ensureTotalCapacity. Én reservasjon unngår gjentatte omallokeringer når listen fylles.
try list.ensureTotalCapacity(100);Fjern elementer
Ta bort det siste elementet med pop, eller fjern et element i midten ved hjelp av indeksen. Listen reduserer lengden, men beholder kapasiteten.
const last = list.pop();Overfør eierskapet
Kall toOwnedSlice for å ta bufferen ut som en vanlig slice. Listen tømmes, og De blir ansvarlig for å frigjøre den.
const slice = try list.toOwnedSlice();Bygget på det grunnleggende
ArrayList er ganske enkelt alloc, kopiering og free utført for Dem. Den viser hvor langt eksplisitte allokatorer kan bringe Dem med en ryddig og gjenbrukbar type. ✅
Hurtigsjekk
Husk hva De må gjøre når en ArrayList ikke lenger brukes.
Oppsummering
De har lært at std.ArrayList vokser dynamisk med en allokator: init, append med try, lesing av .items og alltid deinit når De er ferdig. 🎯
Lær deg Zig 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
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Dynamiske lister med ArrayList» gratis?
Ja – hele teksten i «Dynamiske lister med ArrayList» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Zig Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Zig Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Dynamiske lister med ArrayList»?
La en allocator-støttet buffer vokse. Du øver på Zig 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 Zig Academy?
Ingen tidligere erfaring er nødvendig. Zig 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 4 av 4.
Hvor lang tid tar leksjonen «Dynamiske lister med ArrayList»?
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 Zig Academy-leksjonen?
Ja. Alle Zig 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
- Hvorfor Zig ikke har skjulte allokeringer
- Allocator-grensesnittet
- alloc, free, create, destroy
- Dynamiske lister med ArrayList