タプル・配列・ベクタ
タプル
fn main() {
// タプル t1とt2は別物
let t1: (bool, f64, u8) = (true, 6.4, 1);
let t2: (f64, i32, bool) = (6.4, 1, true);
// タプルの要素を出力
println!("タプルの要素は:{:?}", t1);
// 要素を1つずつ取り出す
let i = t1.0;
println!("t1の1つ目の要素は:{}", 1);
// タプルの要素をまとめて取り出す
let (x, y, z) = t2;
println!("t2の3つの要素は、x: {}, y: {}, z: {}", x, y, z);
let (x, y, _) = t2;
println!("t2の2つの要素は、x: {}, y: {}", x, y);
// unit型
let u: () = ();
println!("unit型の値は:{:?}", u);
}
$ cargo run
タプルの要素は:(true, 6.4, 1)
t1の1つ目の要素は:1
t2の3つの要素は、x: 6.4, y: 1, z: true
t2の2つの要素は、x: 6.4, y: 1
unit型の値は:()
配列
fn main() {
// 配列
// 配列の型には[i32; 3]のように、要素の型と長さが指定される
// 一度初期化すると、要素の追加や削除によって要素数を変更することができない
// -> 変更したい場合は、ベクタを使う
let l1: [i32; 3] = [1, 2, 3];
let l2 = [0; 10]; // 10個の0を持つ配列
println!("l1 = {:?}", l1);
// 配列の要素にアクセスするには、[]を使う
println!("l1[0] = {}", l1[0]);
println!("l2[0] = {}", l2[0]);
println!("l2[9] = {}", l2[9]);
// すべての要素をまとめて取得する
let [x, y, z] = l1;
println!("l1の要素は、x = {}, y = {}, z = {}", x, y, z);
// スライス
let l3 = &l1[0..2];
println!("&l1[0..2] は {:?}", l3);
let l4 = &l1[0..=1];
println!("&l1[0..=1] は {:?}", l4);
let l4 = &l1[..=1]; // 始めを省略
println!("&l1[..=1] は {:?}", l4);
let l4 = &l1[0..]; // 終わりを省略
println!("&l1[0..] は {:?}", l4);
// 配列の長さを取得するには、len()メソッドを使う
println!("l1の長さ = {}", l1.len());
println!("l2の長さ = {}", l2.len());
}
$ cargo run
l1 = [1, 2, 3]
l1[0] = 1
l2[0] = 0
l2[9] = 0
l1の要素は、x = 1, y = 2, z = 3
&l1[0..2] は [1, 2]
&l1[0..=1] は [1, 2]
&l1[..=1] は [1, 2]
&l1[0..] は [1, 2, 3]
l1の長さ = 3
l2の長さ = 10
ベクタ
fn main() {
// ベクタ
// ベクタは、可変長の配列で、要素の追加や削除が可能
// ベクタの型には、Vec<i32>のように、要素の型が指定される
let v1 = vec![1, 2, 3, 4, 5];
println!("v1 は {:?}", v1);
let v2 = vec![0; 5];
println!("v2 は {:?}", v2);
// 可変な空のベクタの作成 mut をつける必要がある。
let mut v3 = Vec::new();
// ベクタの要素の追加
v3.push(1);
v3.push(2);
v3.push(3);
println!("v3 は {:?}", v3);
// ベクタの要素の削除
let x = v3.pop(); // ベクタから最後の要素を取り出す➡オプション型となる
println!("v3 を pop した後は {:?}", v3);
println!("v3 を pop した後の x は {:?}", x);
// ベクタの要素の参照
let y = v1[1];
println!("v1 の 2 番目の要素(let y = v1[1];)は {}", y);
let z = v1.get(10);
println!("v1 の 2 番目の要素(let z = v1.get(1);)は {:?}", z);
// 配列と同じようにスライスができる
let v1 = vec![1, 2, 3, 4, 5];
let v1_slice = &v1[1..3];
println!("v1 の 2 番目から 3 番目の要素は {:?}", v1_slice);
}
$ cargo run
v1 は [1, 2, 3, 4, 5]
v2 は [0, 0, 0, 0, 0]
v3 は [1, 2, 3]
v3 を pop した後は [1, 2]
v3 を pop した後の x は Some(3)
v1 の 2 番目の要素(let y = v1[1];)は 2
v1 の 2 番目の要素(let z = v1.get(1);)は None
v1 の 2 番目から 3 番目の要素は [2, 3]
この記事が気に入ったらサポートをしてみませんか?