📦
rust の vector 操作まとめ
Rust でよく使う Vec の操作を備忘録としてまとめました。
1. 先頭に要素を追加する
let mut v = vec![2, 3, 4];
v.insert(0, 1); // 先頭に 1 を挿入
println!("{:?}", v); // [1, 2, 3, 4]
use std::collections::VecDeque;
let mut q = VecDeque::from(vec![1, 2, 3]);
q.push_front(0);
println!("{:?}", q); // [0, 1, 2, 3]
2. 先頭から要素を取り出す
let mut v = vec![1, 2, 3];
let first = v.remove(0); // 先頭を取り出す
println!("first = {}, v = {:?}", first, v);
// first = 1, v = [2, 3]
use std::collections::VecDeque;
let mut q = VecDeque::from(vec![1, 2, 3]);
let first = q.pop_front();
println!("first = {:?}, q = {:?}", first, q);
// first = Some(1), q = [2, 3]
3. 末尾に要素を追加する
let mut v = vec![1, 2];
v.push(3);
println!("{:?}", v); // [1, 2, 3]
4. 末尾から要素を取り出す
let mut v = vec![1, 2, 3];
let last = v.pop();
println!("{:?}", last); // Some(3)
println!("{:?}", v); // [1, 2]
5. 指定の位置に挿入する
let mut v = vec![1, 2, 4, 5];
v.insert(2, 3);
println!("{:?}", v); // [1, 2, 3, 4, 5]
6. 指定の位置の要素を取得する
let v = vec![10, 20, 30];
let x = v[1]; // 20
// 安全に取りたいとき
if let Some(x) = v.get(1) {
println!("{}", x); // 20
}
// 元の vec は変化しない
println!("{:?}", v); // [10, 20, 30];
// 取り除きたいときは remove
println!("{}, {:?}", v.remove(1), v); // 20, [10, 30];
7. 2つの Vec をマージする
let mut v1 = vec![1, 2, 3];
let v2 = vec![4, 5, 6];
v1.extend(v2); // v1 に v2 を結合
println!("{:?}", v1); // [1, 2, 3, 4, 5, 6]
// 別の方法
let v3 = [vec![1,2,3], vec![4,5,6]].concat();
println!("{:?}", v3); // [1, 2, 3, 4, 5, 6]
8. 特定の値のインデックスを探す
let v = vec![10, 20, 30, 20];
if let Some(pos) = v.iter().position(|&x| x == 20) {
println!("first: {}", pos); // 1
}
if let Some(pos) = v.iter().rposition(|&x| x == 20) {
println!("last: {}", pos); // 3
}
9. ソートしてユニーク化する
let mut v = vec![3, 1, 2, 3, 2, 1, 5];
v.sort();
v.dedup();
println!("{:?}", v); // [1, 2, 3, 5]
Discussion