Vec
VecとはRustにおける可変長の配列です。
複数のデータを保存して番号で管理したり、順番に処理することが簡単にできます。
##使い方
push()
pop()
メソッドにより、スタックのように値を追加・削除出来ます。
要素数を知るにはlen()
メソッドを使用します。
[]
演算子により、任意の要素にアクセスできます。
Vecには他にも様々な機能がありますが、以上の操作とfor文・イテレータで大抵のことは出来ると思います。
fn main() {
//空のVecを作成。
//型推論が可能であれば、型の注釈は不要。
let mut my_vec = Vec::new();
//push()メソッドは最後尾にデータを追加する。
//5を追加したため、要素の型がi32であると推論できる。
my_vec.push(5);
//いくつか適当に追加する。
my_vec.push(2);
my_vec.push(7);
my_vec.push(4);
//len()メソッドで要素数を取得できる。
//4つ値を入れたため、要素数は4となる。
println!("my_vecの要素数は{:?}です。",my_vec.len());
//要素にアクセスするには[]を使う。
//インデックスは0始まり。
println!("0番目のデータは{:?}です。",my_vec[0]);
//my_vecの各要素をelementに束縛してループ処理をする。
let mut average = 0;
for element in &my_vec {
average += element;
}
average /= my_vec.len();
//イテレータを作成することが出来る。
let sum:usize = my_vec.iter().sum();
println!("合計は{}、平均は{}です。",average,sum);
//pop()メソッドは最後尾のデータを取り出す。
//データが1つも無い場合はNoneを、それ以外の場合はSome(要素)を返す。
println!("最後尾のデータは{:?}です。",my_vec.pop());
println!("最後尾のデータは{:?}です。",my_vec.pop());
//pop()メソッドを2回呼び出したため、要素数は2個減る。
println!("my_vecの要素数は{:?}です。",my_vec.len());
}
実行結果
my_vecの要素数は4です。
0番目のデータは5です。
合計は4、平均は18です。
最後尾のデータはSome(4)です。
最後尾のデータはSome(7)です。
my_vecの要素数は2です。
##Vecの作成方法
Vec::new()
以外にも、作成する方法がいくつかあります。
特に、vec!
マクロはリテラルのようにVecを記述出来て便利です。
fn main() {
//vec!マクロでリテラルのようにVecを記述することが出来る。
let names = vec!["太郎","花子","京子","剛士","博之","佳代子"];
println!("{:?}",names);
//イテレータをcollect()メソッドで収集することで作成できる。
let nombers = (1..10).collect::<Vec<i32>>();
println!("{:?}",nombers);
//あらかじめ要素数を指定することが出来る。
//最大の要素数が分かっている場合、メモリの再確保を未然に防ぐことが出来る。
//メモリは確保しているが、要素数は0。
let capacity:Vec<f32> = Vec::with_capacity(100000);
println!("{:?}",capacity);
//to_vec()メソッドで配列をVecに変換することが出来る。
let array = [1,2,3,4,5,6,7,8,9,10];
let mut from_array = array.to_vec();
//append()メソッドでVec同士を繋げることが出来る。
let mut base = vec![10,9,8,7,6,5,4,3,2,1];
base.append(&mut from_array);
println!("{:?}",base);
}