HashMap
キーと値の格納
「HashMap」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
HashMapとは
HashMap<K, V>はキーと値のペアを格納します。位置ではなくキーを使って値を検索します。
標準ライブラリからインポートする必要があります。
use std::collections::HashMap;
fn main() {
let map: HashMap<String, i32> = HashMap::new();
println!("{} entries", map.len());
}HashMapのインポート
HashMapはプレリュードに含まれていないため、ファイルの先頭に次の行を追加します:
use std::collections::HashMap;
use std::collections::HashMap;
fn main() {
let scores: HashMap<&str, i32> = HashMap::new();
println!("empty: {}", scores.is_empty());
}ペアの挿入
insertにキーと値を指定してエントリを追加します。マップはmutでなければなりません。
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert("Alice", 90);
scores.insert("Bob", 85);
println!("{:?}", scores);
}値の検索
getを使うと、キーで値を読み取れます。Optionを返し、見つかった場合はSome(value)、それ以外の場合はNoneになります。
use std::collections::HashMap;
fn main() {
let mut scores = HashMap::new();
scores.insert("Alice", 90);
match scores.get("Alice") {
Some(s) => println!("score {}", s),
None => println!("not found"),
}
}値の更新
既存のキーを指定してinsertを呼び出すと、古い値が置き換えられます。
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.insert("count", 1);
map.insert("count", 5); // overwrites
println!("{:?}", map.get("count"));
}存在しない場合のみ挿入
entry APIとor_insertを使うと、キーが存在しない場合にのみデフォルト値を挿入できます。
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.entry("x").or_insert(10);
map.entry("x").or_insert(99); // ignored, key exists
println!("{:?}", map.get("x"));
}entryによるカウント
よく使われるパターンとして、or_insertで可変参照を取得し、それをインクリメントして出現回数を数えます。
use std::collections::HashMap;
fn main() {
let text = "a b a c b a";
let mut counts = HashMap::new();
for word in text.split_whitespace() {
let c = counts.entry(word).or_insert(0);
*c += 1;
}
println!("{:?}", counts);
}エントリの反復処理
HashMapをループして、すべてのキーと値のペアを調べます。順序は保証されません。
use std::collections::HashMap;
fn main() {
let mut ages = HashMap::new();
ages.insert("Tom", 30);
ages.insert("Sue", 25);
for (name, age) in &ages {
println!("{} is {}", name, age);
}
}エントリの削除
removeでペアを削除します。削除した値をOptionとして返します。
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.insert("key", 42);
let removed = map.remove("key");
println!("removed {:?}, len {}", removed, map.len());
}キーの確認
contains_keyを使うと、値を取得せずにキーが存在するか確認できます。
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.insert("on", true);
println!("{}", map.contains_key("on"));
println!("{}", map.contains_key("off"));
}unwrap_orによるデフォルト値
読み取り時に、Optionをmatchする代わりにunwrap_orで代替値を指定できます。
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
map.insert("a", 1);
let value = map.get("missing").unwrap_or(&0);
println!("{}", value);
}クイックチェック
HashMapの検索の動作を思い出しましょう。
まとめ
RustのHashMap:
HashMap<K, V>はキーと値のペアを格納し、std::collectionsからインポートします。insertは追加または上書きを行い、getはOptionを返します。entry().or_insert()は、存在しない場合にのみ挿入します。for (k, v) in &mapで反復処理します。
use std::collections::HashMap;
fn main() {
let mut inventory = HashMap::new();
inventory.insert("apples", 3);
*inventory.entry("apples").or_insert(0) += 2;
println!("{:?}", inventory.get("apples"));
}よくある質問
「HashMap」レッスンは無料ですか?
はい。「HashMap」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「HashMap」で何を学びますか?
キーと値の格納 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「HashMap」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ベクター
- Stringと&str
- HashMap
- コレクションの反復処理