Доступ к элементам вектора
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 10 из 66.
Как только у вас появится вектор с элементами, вам понадобится доступ к отдельным значениям. Rust предоставляет два различных подхода для получения элементов из вектора, каждый из которых имеет свои компромиссы между удобством и безопасностью.
Первый способ использует синтаксис индексации с квадратными скобками, аналогично массивам:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // получает 10
let third = numbers[2]; // получает 30Хотя этот синтаксис знаком и лаконичен, он сопряжен со значительным риском: если вы попытаетесь обратиться к индексу, которого не существует, ваша программа завершится с ошибкой (panic) и аварийно остановится:
let numbers = vec![10, 20, 30];
let invalid = numbers[5]; // Это вызовет панику!Второй способ использует метод .get(), который обеспечивает безопасный доступ:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // возвращает Some(10)
let invalid = numbers.get(5); // возвращает NoneМетод .get() возвращает Option — либо Some(value), если индекс существует, либо None, если нет. Это заставляет вас обрабатывать вероятность того, что элемент может не существовать, предотвращая сбои и делая ваш код более надежным.
Задание
ЛегкоНапишите функцию get_element_at, которая принимает вектор numbers и индекс idx, и возвращает элемент по этому индексу, используя безопасный доступ.
Используйте метод .get() для безопасного доступа к элементу. Если индекс существует, верните значение. Если индекс не существует, верните -1 в качестве значения по умолчанию.
Параметры:
numbers(Vec<i32>): Вектор для доступаidx(i32): Индекс для получения
Возвращает: Элемент по заданному индексу или -1, если индекс не существует (i32)
Шпаргалка
Rust предоставляет два метода для доступа к элементам вектора:
Синтаксис индексации с использованием квадратных скобок:
let numbers = vec![10, 20, 30, 40];
let first = numbers[0]; // получает 10
let third = numbers[2]; // получает 30Этот метод вызовет панику (panic), если индекс не существует:
let invalid = numbers[5]; // Это вызовет панику!Метод .get() для безопасного доступа:
let numbers = vec![10, 20, 30, 40];
let first = numbers.get(0); // возвращает Some(10)
let invalid = numbers.get(5); // возвращает NoneМетод .get() возвращает тип Option — либо Some(value), если индекс существует, либо None, если нет. Это предотвращает аварийное завершение программы и требует явной обработки отсутствующих элементов.
Попробуйте сами
fn get_element_at(numbers: Vec<i32>, idx: 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Итоги: поиск элемента