#16 Rustで学ぶ辞書型(マップ)の基本

Rustで名前と値の組み合わせを扱うには、HashMapという仕組みを使います。この記事では、Rustにおける辞書に相当する使い方と、安全な値の取り出し方を解説します。

HashMapを作ってみる

use std::collections::HashMap;

let mut person = HashMap::new();
person.insert("name", "太郎");
person.insert("job", "エンジニア");

値を取り出す

Rustでは、キーが存在しない可能性を考慮し、get()はOption型という「値があるかないか」を表す型を返します。

match person.get("name") {
    Some(name) => println!("{}", name),
    None => println!("見つかりません"),
}

既定値をあらかじめ決めておきたい場合はunwrap_orが便利です。

let name = person.get("name").unwrap_or(&"名無し");
println!("{}", name);

キーの有無を確認する

if person.contains_key("name") {
    println!("nameキーがあります");
}

全てのキーと値を順に処理する

for (key, value) in &person {
    println!("{}: {}", key, value);
}

キーが無いときだけ値を設定する

「既にあれば何もせず、無ければ挿入する」という処理はentryを使うと1行で書けます。

person.entry("age").or_insert("20");

entryとor_insertを組み合わせる書き方は、集計処理(出現回数を数えるなど)でも頻繁に使われる、Rustらしいイディオムです。

Rustならではの注意点

他の言語のように、存在しないキーに直接アクセスしてエラーメッセージだけを表示する、ということはRustではできません。get()の結果がSomeかNoneかを必ず確認する必要があり、この一手間が、存在しないキーへのアクセスによるバグを未然に防いでいます。慣れないうちは面倒に感じるかもしれませんが、実行時に突然クラッシュするリスクを減らせる、Rustらしい安全設計だと理解しておきましょう。

まとめ

Rustの辞書はHashMapが基本で、get()の結果はOption型として安全に扱います。Some・Noneの確認や、entryによる挿入も覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本