可変の反復処理
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 12/66。
ベクタの要素を読み取るだけでなく、それらを変更する必要がある場合があります。前のレッスンでは要素を反復処理して読み取る方法を学びましたが、このレッスンではミュータブルな参照 (mutable references)を使用して、反復処理中に要素を変更する方法を学びます。
反復処理中に要素を変更するには、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>)
チートシート
イテレーション中にベクタの要素を変更するには、&mut を使用した可変参照を使用します:
let mut numbers = vec![1, 2, 3, 4];
for number in &mut numbers {
*number = *number * 2;
}重要なポイント:
&mut numbersはベクタへの可変参照を作成します- 各イテレーションは、個々の要素への可変参照を提供します
*演算子(参照外し演算子)は、実際の値にアクセスして変更します- 変更を許可するために、ベクタは
mutとして宣言されている必要があります
このパターンを使用すると、新しいベクタを作成することなく、その場で効率的にデータを変換できます。
自分で試してみよう
fn add_ten_to_all(numbers: Vec<i32>) -> Vec<i32> {
// ここにコードを記述してください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。