Menu
Coddy logo textTech

Доступ к элементам вектора

Часть раздела 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, если нет. Это заставляет вас обрабатывать вероятность того, что элемент может не существовать, предотвращая сбои и делая ваш код более надежным.

challenge icon

Задание

Легко

Напишите функцию 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 {
    // Напишите код здесь
}
quiz iconПроверьте себя

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

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