Zig Academy · Lekcja

Dynamiczne listy z ArrayList

Powiększaj bufor oparty na alokatorze.

Lekcja 4 z 413 kroki

Dynamiczne listy z ArrayList to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Zig Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Zig Academy zawiera 4 lekcji w sumie.

Bufor, który może rosnąć

Czasami z góry nie znasz rozmiaru. std.ArrayList to dynamiczna tablica, która rośnie w miarę dodawania elementów i korzysta z alokatora. 📈

Jest typem generycznym

ArrayList to typ generyczny: raz określasz typ elementów, a otrzymujesz listę zawierającą dokładnie ten typ, z pełnym bezpieczeństwem typów.

const List = std.ArrayList(i32);

Utwórz ją za pomocą init

Tworzysz listę za pomocą init, przekazując jej alokator, którego będzie używać do powiększania. Alokator pozostaje przypisany do listy przez cały okres jej istnienia.

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

Zawsze wywołuj deinit

Lista posiada pamięć na stercie, dlatego połącz init z deinit, aby ją zwolnić. Umieszczenie defer zaraz po init automatyzuje to czyszczenie.

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

Dodawaj elementy

Dodaj jeden element za pomocą append. Może to wymagać powiększenia bufora, więc operacja może się nie powieść i dlatego wywołuje się ją z try.

try list.append(7);

Uzyskaj dostęp do danych

Aktualna zawartość znajduje się w wycinku .items. Odczytujesz go, indeksujesz i iterujesz po nim tak jak po każdym innym wycinku w Zig.

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

Długość i pojemność

Długość to list.items.len, czyli liczba przechowywanych wartości. Pojemność oznacza zarezerwowane miejsce, które może być większe, aby uniknąć częstego powiększania.

Zarezerwuj miejsce z wyprzedzeniem

Jeśli znasz przybliżony rozmiar, najpierw wywołaj ensureTotalCapacity. Jednorazowa rezerwacja pozwala uniknąć wielokrotnej realokacji podczas zapełniania listy.

try list.ensureTotalCapacity(100);

Usuwaj elementy

Usuń ostatni element za pomocą pop albo usuń element ze środka, podając jego indeks. Lista zmniejsza długość, ale zachowuje pojemność.

const last = list.pop();

Przekaż własność

Wywołaj toOwnedSlice, aby przejąć bufor jako zwykły wycinek. Lista zostaje opróżniona, a odpowiedzialność za zwolnienie bufora przechodzi na Ciebie.

const slice = try list.toOwnedSlice();

Zbudowany na podstawach

ArrayList to po prostu alloc, kopiowanie i free wykonywane za Ciebie. Pokazuje, jak wiele można osiągnąć dzięki jawnym alokatorom i uporządkowanemu, wielokrotnego użytku typowi. ✅

Szybkie sprawdzenie

Przypomnij sobie, co należy zrobić, gdy przestajesz używać ArrayList.

Podsumowanie

Dowiedziałeś się, że std.ArrayList dynamicznie rośnie dzięki alokatorowi: używa init, append z try, odczytu .items i zawsze wywołuje deinit po zakończeniu pracy. 🎯

Bezpłatny start

Ucz się Zig dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Dynamiczne listy z ArrayList” jest bezpłatna?

Tak — pełny tekst „Dynamiczne listy z ArrayList” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Zig Academy, przejdź na CoddyKit PRO. Kurs Zig Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Dynamiczne listy z ArrayList”?

Powiększaj bufor oparty na alokatorze. Ćwiczysz Zig Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Zig Academy?

Nie wymagamy żadnego doświadczenia. Zig Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Dynamiczne listy z ArrayList”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Zig Academy?

Tak. Każda lekcja Zig Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego Zig nie ma ukrytych alokacji
  2. Interfejs alokatora
  3. alloc, free, create, destroy
  4. Dynamiczne listy z ArrayList
← Powrót do Zig Academy