Menu
Coddy logo textTech

その他のスライス

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] が得られます
challenge icon

チャレンジ

簡単

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);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: Rustオンラインコンパイラ