HashMapとAutoHashMapの利用
stdでキーと値を保存します
「HashMapとAutoHashMapの利用」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
ハッシュマップを使う理由
ハッシュマップはキーと値のペアを保存し、ほぼ定数時間で検索できます。Zigには標準ライブラリに実装があるため、自分で作る必要はほとんどありません。🗺️
まずAutoHashMapを使う
std.AutoHashMapは、整数や列挙型など一般的なキー型に対して、ハッシュ化と等価性判定を自動的に選択します。キー型と値型を指定して使います。
const Map = std.AutoHashMap(u32, []const u8);アロケーターが必要
ほかの拡張可能なコンテナと同様に、マップはメモリを借りて使います。アロケーターをinitに渡すと、エントリの追加に応じてマップが拡張されます。
var map = std.AutoHashMap(u32, u32).init(allocator);
defer map.deinit();putで挿入する
putはキーを追加または上書きします。拡張時にメモリを割り当てる可能性があるため、エラーユニオンを返し、tryを使います。
try map.put(1, 100);getで検索する
getはオプショナル値を返します。キーが存在すれば保存された値を、存在しなければnullを返します。キーがなくてもクラッシュしません。
const v = map.get(1); // ?u32結果をアンラップする
getはオプショナル値を返すため、値を使う前にorelseまたはifキャプチャで存在しない場合を処理します。
const v = map.get(1) orelse 0;確認して削除する
containsでキーの有無を確認し、removeを呼び出してキーを削除します。Removeはキーが存在していた場合にtrueを返します。
if (map.contains(1)) _ = map.remove(1);AutoHashMapで判断できない場合
スライスのようなキーでは、自動ハッシュ化をコンパイルできません。その場合は低レベルのstd.HashMapを使い、コンテキストを指定します。
テキストキーにはStringHashMap
文字列キーはよく使われるため、stdには便利なヘルパーがあります。std.StringHashMapは[]const u8のハッシュ化方法をあらかじめ理解しています。
var m = std.StringHashMap(i32).init(allocator);
try m.put("score", 42);エントリを反復処理する
イテレーターを取得してループし、すべてのペアを訪問します。各エントリからキーへのポインターと値へのポインターにアクセスできます。
var it = map.iterator();
while (it.next()) |e| {
std.debug.print("{d}={d}\n", .{ e.key_ptr.*, e.value_ptr.* });
}Mapでは必ずdeinitする
マップは内部バッファを所有しているため、使い終わったらdeinitを呼び出します。忘れるとテスト用アロケーターが検出します。
defer map.deinit();クイックチェック
キーが整数のハッシュマップが必要です。最も簡単に適合する標準型はどれでしょうか。
まとめ
単純なキーにはAutoHashMapを、テキストにはStringHashMapを使います。アロケーターで初期化し、putとgetでペアを操作し、反復処理したらdeinitします。🎯
よくある質問
「HashMapとAutoHashMapの利用」レッスンは無料ですか?
はい。「HashMapとAutoHashMapの利用」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「HashMapとAutoHashMapの利用」で何を学びますか?
stdでキーと値を保存します ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「HashMapとAutoHashMapの利用」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ゼロから作る汎用スタック
- 単方向連結リスト
- HashMapとAutoHashMapの利用
- プロファイリングと安全性のトレードオフ