引き続き型について学ぶ。

スライス

配列やベクタなど連続して同じ型の値が並んでいる要素の範囲にアクセルするための型らしい。参照、またはBoxを用いてアクセスする。&[bool]、&mut[bool]、Box<[bool]>などが相当する。

let a1 = ['a', 'b', 'c', 'd'];

&a1[..] // 全要素のスライス
&a1[1..3] // 2番目と3番目の要素のスライス
&a1[1..=3] // 2~4番目の要素のスライス

スライスには多くの操作が用意されている

let a2: [i32; 0] = [];
let s2 = &a2;

s2.is_empty(); // 空かどうか確認
s2.len(); // 長さを確認
s2.first(); // 最初の要素を入手、返り値はSome
s2.get(3); // Someを返す形でアクセス
s2.contains(&1); // 要素を持つか確認
s2.starts_with(&[1, 2]); // はじめが一致するか確認
s2.ends_with(&[1, 2]);

let mut a2 = [1, 2, 5, 3, 4];
&mut a2[2..4].sort();

文字列スライス

str型はほとんどの場合スライスを通じてアクセスするため文字列スライス型と呼ばれ&strと表記するらしい。文字列リテラルの型は&'static

strの.len()メソッドはバイト数を返す。n文字目を取り出すということもできず、何バイト目かを指定してアクセスすることになる(めんどくさくない?)