0Pricing
Zig Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

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

  1. ゼロから作る汎用スタック
  2. 単方向連結リスト
  3. HashMapとAutoHashMapの利用
  4. プロファイリングと安全性のトレードオフ
← Zig Academyに戻る