Rust の HashMap データ格納チュートリアル

RustRustBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Rust の HashMap について学びます。HashMap は、キーを使って値を格納するために使用されます。HashMap のキーは、ブール値、整数、文字列、または EqHash トレイトを実装する他の任意の型を含む、さまざまな型であることができます。HashMap は、要素の数に基づいて動的に拡大および縮小することができます。HashMap::with_capacity(uint) を使って特定の容量で HashMap を作成することもできますし、デフォルトの初期容量で HashMap を取得するには HashMap::new() を使います。提供されたコード例は、連絡先の名前と電話番号を格納し、挿入、取得、変更、および削除などの操作を行うことで HashMap の使い方を示しています。

注: 実験でファイル名が指定されていない場合、好きなファイル名を使うことができます。たとえば、main.rs を使って、rustc main.rs &&./main でコンパイルして実行することができます。

HashMap

ベクターは整数インデックスで値を格納するのに対し、HashMap はキーで値を格納します。HashMap のキーは、ブール値、整数、文字列、または EqHash トレイトを実装する他の任意の型であることができます。次のセクションでこれについてもっと詳しく説明します。

ベクターと同様に、HashMap は拡張可能ですが、余分な空間がある場合には HashMap 自身も縮小することができます。HashMap::with_capacity(uint) を使って特定の初期容量で HashMap を作成することもできますし、デフォルトの初期容量で HashMap を取得するには HashMap::new() を使います(推奨)。

use std::collections::HashMap;

fn call(number: &str) -> &str {
    match number {
        "798-1364" => "We're sorry, the call cannot be completed as dialed.
            Please hang up and try again.",
        "645-7689" => "Hello, this is Mr. Awesome's Pizza. My name is Fred.
            What can I get for you today?",
        _ => "Hi! Who is this again?"
    }
}

fn main() {
    let mut contacts = HashMap::new();

    contacts.insert("Daniel", "798-1364");
    contacts.insert("Ashley", "645-7689");
    contacts.insert("Katie", "435-8291");
    contacts.insert("Robert", "956-1745");

    // 参照を取り、Option<&V> を返す
    match contacts.get(&"Daniel") {
        Some(&number) => println!("Calling Daniel: {}", call(number)),
        _ => println!("Don't have Daniel's number."),
    }

    // `HashMap::insert()` は、挿入される値が新しい場合には `None` を返し、
    // それ以外の場合には `Some(value)` を返します
    contacts.insert("Daniel", "164-6743");

    match contacts.get(&"Ashley") {
        Some(&number) => println!("Calling Ashley: {}", call(number)),
        _ => println!("Don't have Ashley's number."),
    }

    contacts.remove(&"Ashley");

    // `HashMap::iter()` は、(&'a key, &'a value) のペアを任意の順序で返すイテレータを返します。
    for (contact, &number) in contacts.iter() {
        println!("Calling {}: {}", contact, call(number));
    }
}

ハッシュ化とハッシュマップ(時々ハッシュテーブルと呼ばれます)の仕組みに関する詳細は、Hash Table Wikipedia を参照してください。

まとめ

おめでとうございます!あなたは HashMap の実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習することができます。