0Pricing
Zig Academy · レッスン

ArrayListによる動的リスト

アロケーターを利用するバッファーを拡張します。

「ArrayListによる動的リスト」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。

拡張可能なバッファー

あらかじめサイズが分からないことがあります。std.ArrayListは、要素を追加するにつれて拡張する動的配列で、アロケータによって支えられています。📈

ジェネリックである

ArrayListはジェネリック型です。要素の型を一度指定すると、その型だけを格納する、完全な型安全性を備えたリストが得られます。

const List = std.ArrayList(i32);

initで作成する

initを使ってリストを作成し、拡張に使用するアロケータを渡します。そのアロケータは、リストの存続期間全体を通じてリストに保持されます。

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

必ずdeinitする

リストはヒープメモリを所有するため、initとdeinitを組み合わせて解放します。initの直後にdeferを置くと、後片付けを自動化できます。

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

要素を追加する

appendで要素を1つ追加します。バッファーの拡張が必要になる場合があるため、失敗する可能性があり、tryを付けて呼び出します。

try list.append(7);

データにアクセスする

現在の内容は.itemsスライスに格納されています。他のZigのスライスと同じように、そのスライスの読み取り、インデックスアクセス、反復処理ができます。

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

長さと容量

長さはlist.items.len、つまり格納した値の個数です。容量は予約済みの領域で、再拡張の頻度を減らすために長さより大きい場合があります。

あらかじめ予約する

おおよそのサイズが分かっている場合は、先にensureTotalCapacityを呼び出します。一度予約しておけば、リストがいっぱいになるたびに再割り当てする必要がなくなります。

try list.ensureTotalCapacity(100);

要素を削除する

popで最後の要素を取り出すか、インデックスを指定して中央の要素を削除します。リストの長さは短くなりますが、容量は維持されます。

const last = list.pop();

所有権を移す

toOwnedSliceを呼び出すと、バッファーを通常のスライスとして取り出せます。リストは空になり、取り出したスライスの解放は自分の責任になります。

const slice = try list.toOwnedSlice();

基本機能の上に構築されている

ArrayListは、alloc、コピー、freeを代わりに実行してくれるものにすぎません。明示的なアロケータによって、整然とした再利用可能な型をどこまで実現できるかを示しています。✅

確認問題

ArrayListを使い終えたときに何をしなければならないか、思い出してください。

まとめ

std.ArrayListはアロケータを使って動的に拡張されること、initし、tryを付けてappendし、.itemsを読み取り、使い終わったら必ずdeinitすることを学びました。🎯

よくある質問

「ArrayListによる動的リスト」レッスンは無料ですか?

はい。「ArrayListによる動的リスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。

「ArrayListによる動的リスト」で何を学びますか?

アロケーターを利用するバッファーを拡張します。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Zig Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「ArrayListによる動的リスト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このZig Academyレッスンでコードを書いて実行できますか?

はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Zigに隠れたメモリ確保がない理由
  2. アロケーターインターフェース
  3. alloc、free、create、destroy
  4. ArrayListによる動的リスト
← Zig Academyに戻る