0Pricing
Learn Rust Coding · レッスン

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

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

  1. ベクター
  2. Stringと&str
  3. HashMap
  4. コレクションの反復処理
← Learn Rust Codingに戻る