Menu
Coddy logo textTech

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

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 12 из 66.

Иногда вам нужно делать больше, чем просто читать элементы вектора — вам нужно их изменять. В то время как предыдущий урок показал, как перебирать и читать значения, этот урок научит вас изменять элементы во время итерации, используя изменяемые ссылки.

Чтобы изменять элементы во время итерации, вам нужно использовать &mut вместо & в вашем цикле for:

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>)

Шпаргалка

Чтобы изменять элементы вектора во время итерации, используйте изменяемые ссылки с &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> {
    // Напишите код здесь
}
quiz iconПроверьте себя

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

Все уроки раздела Logic & Flow