🦀
Rust 配列とVec型
はじめに
Rustの配列とVec型についてまとめてみます。
Rustの記事はカニの方が良さそうなので、変えてみました。
配列
サイズが固定長で、同じデータ型のみ格納できる。
初期化
- 初期値を設定する場合
let a = [1, 2, 3, 4, 5];
この時、データ型が違うと、コンパイルエラーが出る。
- 値を後で変更する場合は、
let mut a = [1, 2, 3, 4, 5];
このようにミュータブルにしておく必要がある。
- すべて同じ値で初期化する場合
let mut a = [0; 100];
とすると、すべて0でサイズ100の配列ができる。
- 空の配列
let mut a: [i32; 10];
こうするとi32型を格納できるサイズ10の配列が宣言できる。
Vec型
サイズが可変の配列。
初期化
- 初期値を設定する場合
let a = vec!["a", "b"];
vec!は、標準ライブラリのマクロとして用意されている。
let a = vec!["a"; 10];
配列と同じように、すべての値を「a」としてサイズ10のVec型を作成できる。
- 変数だけの初期化
let mut a: Vec<i32> = Vec::new();
i32型を格納するVec型の変数だけ宣言した状態になります。
push 末尾に追加
let mut a: Vec<i32> = Vec::new();
a.push(0);
a.push(1);
insert 任意の位置に挿入
let mut a: Vec<i32> = Vec::new();
a.push(0);
a.insert(0, 1); // 0番目に1を挿入
中身は、「1、0」の順になる。
remove 指定位置の要素を削除
let mut a: Vec<i32> = Vec::new();
a.push(0);
a.insert(0, 1); // 0番目に1を挿入
a.remove(0); // 0番目の要素を削除
pop 末尾の要素を取り出して削除する。
let mut a: Vec<i32> = Vec::new();
a.push(0);
a.insert(0, 1); // 0番目に1を挿入
let r = a.pop(); // 最後の要素を取り出して削除
let v = r.unwrap();
取得した要素は、Option型になっているので、unwrapして使う。
first、last 先頭、末尾の値を取得する。
let mut a: Vec<i32> = Vec::new();
a.push(0);
a.insert(0, 1); // 0番目に1を挿入
let f = a.first();
let l = a.last();
こちらもOption型なので、unwrapして使う。
指定位置の値を取得
let a = vec![0, 1, 2, 3, 4];
let v0 = a[0];
let v1 = a.get(0);
[]もgetも同じく指定位置の値を取得するが、getの場合はOption型が返ってくる。
まとめ
値を設定して初期化できるのは便利そうではあるが、実際は便利なのでVec::new()をよく使いそうな感じがしています。
ただしサイズが決まっているのであれば、配列として作成したほうが、メモリの節約にはなりそう。
Discussion