ベクタの反復処理
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 11/66。
ベクトルの作成方法と個々の要素へのアクセス方法を理解したところで、ベクトルのすべての要素を体系的に処理する方法を学びましょう。for ループはこのタスクに最適で、各要素を順番に走査することができます。
ベクタを反復処理するための基本的な構文は次のとおりです。
let names = vec!["Alice", "Bob", "Charlie"];
for name in &names {
println!("Hello, {}!", name);
}names の前にある & に注目してください。これによりベクタへの参照が作成され、ベクタ自体の所有権を取得することなく各要素を読み取ることができます。各イテレーションでは、ループ変数 name を通じて一度に1つの要素にアクセスできます。
forループは、境界チェックを自動的に処理します。手動でのインデックス指定とは異なり、存在しない要素に誤ってアクセスしようとすることはありません。ループはベクタに含まれる要素の数だけ正確に繰り返されるため、安全かつ便利です。
このパターンは、あらゆる型のベクタで使用できます:
let scores = vec![85, 92, 78, 90];
for score in &scores {
println!("Score: {}", score);
}このアプローチは、値を読み取る必要がある場合に、ベクタ内のすべての要素を処理するための最も一般的で慣用的な方法です。
チャレンジ
簡単ベクタ numbers を受け取り、そのすべての要素の合計を返す関数 sum_all_elements を作成してください。
for ループを使用してベクタを反復処理し、すべての要素の合計を累積します。
引数:
numbers(Vec<i32>): 合計する整数のベクタ
戻り値: ベクタ内のすべての要素の合計 (i32)
チートシート
ベクタを反復処理するには、ベクタへの参照とともに for ループを使用します:
let names = vec!["Alice", "Bob", "Charlie"];
for name in &names {
println!("Hello, {}!", name);
}ベクタ名の前にある & は参照を作成し、所有権を取得せずに各要素を読み取ることができます。ループは自動的に境界チェックを処理し、ベクタに含まれる要素の数だけ正確に訪問します。
このパターンは、あらゆるベクタ型で機能します:
let scores = vec![85, 92, 78, 90];
for score in &scores {
println!("Score: {}", score);
}自分で試してみよう
fn sum_all_elements(numbers: Vec<i32>) -> i32 {
// ここにコードを書いてください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。