その他のスライス
CoddyのRustジャーニー「論理とフロー」セクションの一部。レッスン 57/66。
文字列スライスは非常に便利ですが、スライスは文字列だけに限定されません。Rust のスライスの概念はあらゆる element のシーケンスに拡張されるため、所有権を取得せずにコレクションを扱うための強力なツールになります。
文字列で学んだものと同じ構文を使って、配列やベクターから slice を作成できます。たとえば、numbers の配列がある場合、その一部または全体を references する slice を作成できます。
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // これにより [2, 3, 4] が得られます
let full_slice: &[i32] = &numbers; // これは配列全体を参照します同じ原則がベクターにも当てはまります。ベクターからスライスを作成すると、データを移動したりコピーしたりせずに、その一部を操作できます:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // これにより [10, 20] が得られますチャレンジ
簡単3つのinputを受け取ります。first inputはcomma-separatedのnumbersのリストです。second inputは、sliceを作成するためのstartおよびendのindicesを表す、空白でseparatedされた2つのnumbersです。third inputは、sliceからaccessするindexを表す単一のnumberです。
comma-separatedのnumbersからvectorを作成し、指定された範囲を使用してsliceを作成します。sliceから指定されたindexのelementをaccessして出力します。
要件:
- first input(comma-separatedのnumbers)をReadして、空白をtrimする
- inputをcommaでsplitし、各numberを
i32にparseする - これらのnumbersからvectorを作成する
- second input(空白でseparatedされた2つのnumbers)をReadして、空白をtrimする
- second inputを空白でsplitして、startおよびendのindicesを取得する
- 両方のindicesを
usizeにparseする - 範囲構文
&vec[start..end]を使用してvectorからsliceを作成する - third input(accessするindex)をReadして、空白をtrimする
- indexを
usizeにparseする - sliceから指定されたindexのelementをAccessする
- AccessしたelementをPrintする
input:
- first行: Comma-separatedのnumbers(例:
10,20,30,40,50) - second行: 空白でseparatedされた2つのnumbers(例:
1 4) - third行: index number(例:
2)
出力:
- sliceから指定されたindexのelement
自分で試してみよう
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// 最初の入力を読み取る(カンマ区切りの数値)
let first_input = lines.next().unwrap().unwrap();
// 2番目の入力を読み取る(開始と終了のインデックス)
let second_input = lines.next().unwrap().unwrap();
// 3番目の入力を読み取る(アクセスするインデックス)
let third_input = lines.next().unwrap().unwrap();
// TODO: 以下にコードを書いてください
// カンマ区切りの数値を解析してベクタを作成する
// 開始と終了のインデックスを解析する
// ベクタからスライスを作成する
// スライスから指定されたインデックスの要素にアクセスする
// 結果を出力する
// println!("{}", result);
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: Rustオンラインコンパイラ