まとめ:要素の検索
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 41/66。
チャレンジ
簡単2つの入力を受け取ります。最初の入力はカンマで区切られた数値のリスト(例:10,20,30,40)で、2番目の入力は検索対象となるターゲットの数値です。カンマ区切りの数値をパースしてベクタ(vector)に格納し、ターゲットの数値を検索してください。.iter().position() を使用してターゲット数値のインデックスを見つけます。これは Option<usize> を返します。match を使用して両方のケースを処理し、適切なメッセージを出力してください。
要件:
- 最初の入力(カンマ区切りの数値)を読み込み、空白をトリミングする
- 入力をカンマで分割し、各部分を
i32にパースしてベクタを作成する - 2番目の入力(ターゲット数値)を読み込み、空白をトリミングする
- ターゲット数値を
i32にパースする .iter().position(|&x| x == target)を使用してベクタ内のターゲットを検索するmatch式を使用して、.position()から返されたOptionを処理するSome(index)のアームでは、次のように出力する:Found at index [index]Noneのアームでは、次のように出力する:Not found
入力:
- 1行目: カンマ区切りの数値(例:
10,20,30,40) - 2行目: 検索対象のターゲット数値(例:
30)
出力:
- ターゲットが見つかった場合:
Found at index [index] - ターゲットが見つからない場合:
Not found
自分で試してみよう
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// カンマ区切りの数値を読み込む
let numbers_input = lines.next().unwrap().unwrap().trim().to_string();
// ターゲットとなる数値を読み込む
let target_input = lines.next().unwrap().unwrap().trim().to_string();
// カンマ区切りの数値をパースしてベクタに格納する
let numbers: Vec<i32> = numbers_input
.split(',')
.map(|s| s.trim().parse().unwrap())
.collect();
// ターゲットとなる数値をパースする
let target: i32 = target_input.parse().unwrap();
// TODO: 以下にコードを記述してください
// .iter().position() を使用してターゲットを見つけ、match を使用して結果を処理します
}