Итерация по вектору
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 11 из 66.
Теперь, когда вы знаете, как создавать векторы и получать доступ к отдельным элементам, давайте узнаем, как систематически обрабатывать каждый элемент в векторе. Цикл for идеально подходит для этой задачи, позволяя вам последовательно обходить каждый элемент.
Вот базовый синтаксис для итерации по вектору:
let names = vec!["Alice", "Bob", "Charlie"];
for name in &names {
println!("Hello, {}!", name);
}Обратите внимание на & перед names — это создает ссылку на вектор, позволяя вам читать каждый элемент, не принимая владение самим вектором. Каждая итерация предоставляет вам доступ к одному элементу за раз через переменную цикла name.
Цикл for автоматически обрабатывает проверку границ за вас. В отличие от ручной индексации, вы никогда случайно не попытаетесь получить доступ к несуществующему элементу. Цикл обойдет ровно столько элементов, сколько содержит вектор, что делает его одновременно безопасным и удобным.
Вы можете использовать этот паттерн с любым типом вектора:
let scores = vec![85, 92, 78, 90];
for score in &scores {
println!("Score: {}", score);
}Этот подход является наиболее распространенным и идиоматичным способом обработки всех элементов в векторе, когда вам нужно прочитать их значения.
Задание
ЛегкоНапишите функцию sum_all_elements, которая принимает вектор numbers и возвращает сумму всех его элементов.
Используйте цикл for для итерации по вектору и накопления суммы всех элементов.
Параметры:
numbers(Vec<i32>): Вектор целых чисел для суммирования
Возвращает: Сумма всех элементов в векторе (i32)
Шпаргалка
Чтобы перебрать элементы вектора, используйте цикл for со ссылкой на вектор:
let names = vec!["Alice", "Bob", "Charlie"];
for name in &names {
println!("Hello, {}!", name);
}Символ & перед именем вектора создает ссылку, позволяя вам читать каждый элемент, не забирая владение. Цикл автоматически обрабатывает проверку границ и проходит ровно по такому количеству элементов, которое содержится в векторе.
Этот паттерн работает с любым типом вектора:
let scores = vec![85, 92, 78, 90];
for score in &scores {
println!("Score: {}", score);
}Попробуйте сами
fn sum_all_elements(numbers: Vec<i32>) -> i32 {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента