← 解説「スライス — データの一部分への参照」に戻る
サンプルコードで身につける: スライス — データの一部分への参照
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1文字列スライスの基本 — &s[0..5]
String の一部分をレンジで指定して &str のスライスを作る最小の例です。データは複製されておらず、first は message の先頭5バイトを「指している」だけです。切り出したあとも元の文字列がそのまま使えることを確認してください。
Rust
2範囲の省略記法 — [..2] と [8..]
「先頭から」は開始を、「末尾まで」は終了を省略でき、[..] なら全体のスライスになる、という記法のバリエーションです。注文コードから国コードと連番を切り出すように、固定フォーマットの文字列の分解は実務で頻出します。レンジの読み書きに慣れるための例です。
Rust
3配列のスライス — &[i32] を for で回す
スライスは文字列専用ではなく、配列の一部分も &scores[1..4] で切り出せる、という例です。スライスを for で回すと要素は参照として渡ってくるので、* で中身を取り出して合計しています。「データ全体から注目区間だけを、コピーせずに処理する」感覚をつかんでください。
Rust
4関数の引数は &String より &str で受ける
引数を &str にしておけば、String の参照・文字列リテラル・スライスのどれでも同じ関数に渡せる、という実務の定番パターンです。&String で受けるとリテラルを渡せませんが、&str なら全部受けられます。自分で関数を書くときの「文字列引数は &str」という指針はここから来ています。
Rust
5曜日別売上を平日と週末に分けて集計する
7日分の売上配列から平日 [..5] と週末 [5..] をスライスで切り出し、合計関数 sum に渡す実務寄りの例です。sum の引数を &[i32] にしてあるので、部分スライスにも配列全体(&daily_sales)にも同じ関数が使えます。「データは1つ、見たい区間だけ参照で切り出す」というスライスの実力が出る形です。
Rust