可変の反復処理
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 12/66。
ベクターの要素を単に読み取るだけでなく、修正する必要がある場合があります。前のレッスンでは反復処理をして値を読み取る方法を取り上げましたが、このレッスンでは可変参照を使用して反復処理中に要素を変更する方法を学びます。
反復処理中に要素を変更するには、for ループ内で & の代わりに &mut を使用する必要があります。
let mut numbers = vec![1, 2, 3, 4];
for number in &mut numbers {
*number = *number * 2;
}&mut numbers はベクターへの可変参照を作成し、各ループ処理により個々の要素への可変参照が取得されます。* オペレータ(参照外し演算子と呼ばれます)は、参照が指している実際の値にアクセスして変更するために使用されます。
このパターンは、データをその場で変換するのに非常に便利です。変更された値を持つ新しいベクターを作成する代わりに、既存のベクターを効率的に更新できます。内容を変更するため、これが機能するにはベクターを mut として宣言する必要があります。
上記のループの後、numbers には [2, 4, 6, 8] が含まれます。元の各値がその場で2倍に更新されています。
チャレンジ
簡単可変ベクトル numbers を受け取り、各要素に 10 をその場で加算して、変更されたベクトルを返す関数 add_ten_to_all を記述してください。
各要素を直接変更するには、&mut を使用した可変イテレーションを使用します。実際の値にアクセスして変更するには、参照外し演算子 * を使用することを忘れないでください。
パラメータ:
numbers(Vec<i32>): 変更する整数型の可変ベクトル
戻り値: 各要素に 10 が加算された変更後のベクトル (Vec<i32>)
自分で試してみよう
fn add_ten_to_all(mut numbers: Vec<i32>) -> Vec<i32> {
// ここにコードを書いてください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。