ハッシュ マップの操作
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 つ選択して、[回答を確認] を選択します。