Menu
Coddy logo textTech

Изменяемая итерация

Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 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] — каждое исходное значение удвоено на месте.

challenge icon

Задание

Легко
Напиши функцию add_ten_to_all, которая принимает изменяемый вектор numbers, добавляет 10 к каждому элементу непосредственно, а затем возвращает изменённый вектор.

Используй изменяемую итерацию с &mut, чтобы напрямую изменять каждый элемент. Не забудь использовать оператор разыменования *, чтобы обращаться к фактическим значениям и изменять их.

Параметры:

  • numbers (Vec<i32>): Изменяемый вектор целых чисел для изменения

Возвращаемое значение: Изменённый вектор, к каждому элементу которого добавлено 10 (Vec<i32>)

Попробуйте сами

fn add_ten_to_all(mut numbers: Vec<i32>) -> Vec<i32> {
    // Напишите код здесь
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Rust