Zig Academy · Lektion

Dynamiske lister med ArrayList

Udvid en buffer, der understøttes af en allocator.

Lektion 4 af 413 trin

Dynamiske lister med ArrayList er en gratis Zig Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Zig Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Zig Academy-kurset indeholder 4 lektioner i alt.

En buffer, der kan vokse

Nogle gange kender du ikke størrelsen på forhånd. std.ArrayList er et dynamisk array, der vokser, efterhånden som du tilføjer elementer, og som bruger en allokator. 📈

Den er generisk

ArrayList er en generisk type: du angiver elementtypen én gang og får en liste med netop den type og fuld typesikkerhed.

const List = std.ArrayList(i32);

Opret den med init

Du opretter en liste med init og giver den den allokator, den skal bruge til at vokse. Allokatoren følger listen gennem hele dens levetid.

var list = std.ArrayList(i32).init(allocator);

Kald altid deinit

En liste ejer hukommelse på heapen, så sæt init sammen med deinit for at frigive den. Et defer lige efter init gør oprydningen automatisk.

var list = std.ArrayList(i32).init(a);
defer list.deinit();

Tilføj elementer

Tilføj ét element med append. Det kan være nødvendigt at udvide bufferen, så kaldet kan mislykkes og skal derfor bruges sammen med try.

try list.append(7);

Få adgang til dataene

Det aktuelle indhold ligger i .items-udsnittet. Du læser, indekserer og gennemløber dette udsnit ligesom ethvert andet Zig-udsnit.

for (list.items) |n| std.debug.print("{}\n", .{n});

Længde og kapacitet

length er list.items.len: hvor mange værdier du har gemt. Kapaciteten er den reserverede plads, som kan være større for at undgå hyppige udvidelser.

Reserver på forhånd

Hvis du kender størrelsen nogenlunde, skal du først kalde ensureTotalCapacity. Én reservation undgår gentagen omallokering, efterhånden som listen fyldes.

try list.ensureTotalCapacity(100);

Fjern elementer

Fjern det sidste element med pop, eller fjern et element i midten ved hjælp af dets indeks. Listen mindsker sin længde, men beholder sin kapacitet.

const last = list.pop();

Overdrag ejerskabet

Kald toOwnedSlice for at tage bufferen ud som et almindeligt udsnit. Listen tømmes, og du bliver ansvarlig for at frigive det.

const slice = try list.toOwnedSlice();

Bygget på det grundlæggende

ArrayList er blot alloc, kopiering og free udført for dig. Den viser, hvor langt eksplicitte allokatorer rækker med en enkel type, der kan genbruges. ✅

Hurtigt tjek

Husk, hvad du skal gøre, når en ArrayList ikke længere bruges.

Opsummering

Du har lært, at std.ArrayList vokser dynamisk med en allokator: init, append med try, læs .items, og kald altid deinit, når du er færdig. 🎯

Gratis at komme i gang

Lær Zig 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
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Dynamiske lister med ArrayList” gratis?

Ja — hele teksten til “Dynamiske lister med ArrayList” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Zig Academy-kurset, skal du opgradere til CoddyKit PRO. Zig Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Dynamiske lister med ArrayList”?

Udvid en buffer, der understøttes af en allocator. Du øver dig i Zig 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å Zig Academy?

Der kræves ingen tidligere erfaring. Zig 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 4 af 4.

Hvor lang tid tager lektionen “Dynamiske lister med ArrayList”?

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 Zig Academy-lektion?

Ja. Alle Zig 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

  1. Derfor har Zig ingen skjulte allokeringer
  2. Allocator-interfacet
  3. alloc, free, create, destroy
  4. Dynamiske lister med ArrayList
← Tilbage til Zig Academy