可変の反復処理
CoddyのRustジャーニー「論理とフロー」セクションの一部。レッスン 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倍になっています。
チャレンジ
簡単add_ten_to_all関数を作成してください。この関数は可変ベクターnumbersを受け取り、各要素に10をその場で加算してから、変更後のベクターを返します。
&mutを使った可変イテレーションで、各要素を直接変更してください。実際の値にアクセスして変更するには、デリファレンス演算子*を使うことを忘れないでください。
パラメーター:
numbers(Vec<i32>): 変更対象の整数の可変ベクター
戻り値: 各要素に10が加算された変更後のベクター(Vec<i32>)
自分で試してみよう
fn add_ten_to_all(mut numbers: Vec<i32>) -> Vec<i32> {
// ここにコードを書いてください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: Rustオンラインコンパイラ