ハッシュ マップの操作

完了

Rust のもう 1 つの一般的なコレクション型はハッシュ マップです。 HashMap<K, V> 型では、各キー K とその値 V をマッピングすることでデータが格納されます。 ベクター内のデータには整数インデックスを使用してアクセスしますが、ハッシュ マップ内のデータにはキーを使用してアクセスします。

ハッシュ マップ型は、オブジェクト、ハッシュ テーブル、ディクショナリのようなデータ項目の多くのプログラミング言語で使用されます。

ベクターと同様に、ハッシュ マップも拡大可能です。 データはヒープに格納され、ハッシュ マップ項目へのアクセスは実行時にチェックされます。

ハッシュ マップを定義する

次の例では、ハッシュ マップを定義して書籍のレビューを追跡します。 ハッシュ マップ キーは書籍名であり、値は読者のレビューです。

use std::collections::HashMap;
let mut reviews: HashMap<String, String> = HashMap::new();

reviews.insert(String::from("Ancient Roman History"), String::from("Very accurate."));
reviews.insert(String::from("Cooking with Rhubarb"), String::from("Sweet recipes."));
reviews.insert(String::from("Programming in Rust"), String::from("Great examples."));

このコードをさらに詳しく調べてみましょう。 最初の行に、新しい種類の構文が表示あります。

use std::collections::HashMap;

use コマンドにより、Rust 標準ライブラリの collections 部分にある HashMap 定義がプログラムのスコープに取り込まれます。 この構文は、他のプログラミング言語で import を呼び出すことと似ています。

HashMap::new メソッドを使用して空のハッシュ マップを作成します。 必要に応じてキーと値を追加または削除できるように、reviews 変数を変更可能として宣言します。 この例では、ハッシュ マップ キーと値の両方で String 型が使用されます。

let mut reviews: HashMap<String, String> = HashMap::new();

キーと値のペアを追加する

insert(<key>, <value>) メソッドを使用して、ハッシュ マップに要素を追加します。 コードでは、構文は <hash_map_name>.insert() です。

reviews.insert(String::from("Ancient Roman History"), String::from("Very accurate."));

キー値を取得する

ハッシュ マップにデータを追加した後、get(<key>) メソッドを使用してキーの特定の値を取得できます。

// Look for a specific review
let book: &str = "Programming in Rust";
println!("\nReview for \'{}\': {:?}", book, reviews.get(book));

出力は次のようになります。

Review for 'Programming in Rust': Some("Great examples.")

Note

出力には、書籍レビューが単に "Great examples." ではなく、"Some("Great examples.")" として表示されることに注意してください。get メソッドからは Option<&Value> 型が返されるので、Rust によってメソッド呼び出しの結果が "Some()" 表記でラップされます。

キーと値のペアを削除する

ハッシュ マップからエントリを削除するには、.remove() メソッドを使用します。 無効なハッシュ マップ キーに get メソッドを使用すると、get メソッドから "None" が返されます。

// Remove book review
let obsolete: &str = "Ancient Roman History";
println!("\n'{}\' removed.", obsolete);
reviews.remove(obsolete);

// Confirm book review removed
println!("\nReview for \'{}\': {:?}", obsolete, reviews.get(obsolete));

出力は次のようになります。

'Ancient Roman History' removed.
Review for 'Ancient Roman History': None

この Rust Playground 内で、このコードを試し、ハッシュ マップを操作できます。

自分の知識をチェックする

次の質問に答えて、学習した内容を確認してください。 質問ごとに回答を 1 つ選択して、[回答を確認] を選択します。

1.

ユーザーの名前を電話番号に関連付けるアドレス帳を表すのに、どのようなデータ構造が最適ですか?

2.

ハッシュ マップ要素を追加および削除するために使用できる標準メソッドは何ですか?