Rust

Rustの列挙型とコレクション

enumとmatchで状態を表し、VecやHashMapで複数のデータを扱います。

Rust入門の講座一覧

01

列挙型とmatch

enumは、取りうる状態を名前付きで表します。matchで全ての状態を分岐すると、処理漏れをコンパイラーが見つけてくれます。

状態を分岐するRUST
enum Payment { Cash, Card(u32) }

fn main() {
    for payment in [Payment::Cash, Payment::Card(1200)] {
        match payment {
            Payment::Cash => println!("現金払い"),
            Payment::Card(amount) => println!("カード払い: {amount}円"),
        }
    }
}
実行結果OUTPUT
現金払い
カード払い: 1200円
02

Vecで値を並べる

Vec<T>は同じ型の値を可変長で保存します。pushで追加し、反復処理では範囲外アクセスを避けるため参照やgetも使います。

ベクターを使うRUST
fn main() {
    let mut scores = vec![70, 85];
    scores.push(92);
    for score in &scores { println!("{score}"); }
}
実行結果OUTPUT
70
85
92
03

HashMapで対応関係を保存する

HashMapはキーと値の組を保存します。単語の出現回数を数えるような処理に向いています。

単語を数えるRUST
use std::collections::HashMap;

fn main() {
    let mut counts = HashMap::new();
    for word in "rust rust code".split_whitespace() {
        *counts.entry(word).or_insert(0) += 1;
    }
    println!("rust: {}", counts["rust"]);
}
実行結果OUTPUT
rust: 2
04

計算と添字アクセスの注意

整数同士の割り算は小数を切り捨てます。また、ベクターを添字で範囲外アクセスするとパニックになるため、存在しない可能性がある場合はgetでOptionを受け取ります。

整数除算と安全なアクセスRUST
fn main() {
    let values = vec![10, 20, 30];
    println!("{}", 10 / 3);
    println!("{:?}", values.get(5));
}
実行結果OUTPUT
3
None
安全に確認する10 / 3は3になります。添字アクセスが安全とは限らないことも覚えておきましょう。
05

練習

文章を単語に分け、HashMapで各単語の出現回数を数えてみましょう。