Индексация и итерация
Обращайтесь к элементам и перебирайте их.
«Индексация и итерация» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.
Чтение по индексу
У каждого элемента вектора есть номер позиции, называемый индексом. Индексы начинаются с 0, поэтому первый элемент имеет индекс 0.
Прочитать элемент можно с помощью квадратных скобок, например v[0] для получения первого значения.
fn main() {
let v = vec![100, 200, 300];
println!("first = {}", v[0]);
println!("third = {}", v[2]);
}Паника при выходе за границы
Обращение по индексу за пределами вектора вызывает панику и останавливает программу. Для вектора длиной 3 допустимы только индексы 0, 1 и 2.
Обращение к v[5] в этом случае приведёт к сбою, поэтому всегда проверяйте, что индекс находится в допустимом диапазоне.
Безопасный доступ с помощью get
Метод get возвращает Option вместо вызова паники. Вы получаете Some(value), если индекс существует, или None, если он находится вне диапазона.
Так можно корректно обработать отсутствие элемента.
fn main() {
let v = vec![1, 2, 3];
match v.get(5) {
Some(x) => println!("got {}", x),
None => println!("no such index"),
}
}Количество элементов
Метод len возвращает количество элементов. Последний допустимый индекс всегда равен len - 1.
Знание длины помогает безопасно выполнять цикл или проверять границы перед обращением по индексу.
fn main() {
let v = vec![5, 6, 7, 8];
println!("length = {}", v.len());
println!("last = {}", v[v.len() - 1]);
}Перебор значений в цикле
Самый понятный способ посетить каждый элемент — использовать цикл for по ссылке на вектор. Использование &v заимствует вектор, поэтому после этого он остаётся доступным.
На каждой итерации n связывается со ссылкой на один элемент.
fn main() {
let v = vec![2, 4, 6];
for n in &v {
println!("value: {}", n);
}
}Цикл с индексом
Если вам нужна ещё и позиция элемента, вызовите iter().enumerate(). На каждом шаге он выдаёт пары (index, value).
Это особенно удобно для нумерованного вывода или правил, зависящих от позиции.
fn main() {
let v = vec!["a", "b", "c"];
for (i, item) in v.iter().enumerate() {
println!("{}: {}", i, item);
}
}Изменение каждого элемента
Чтобы изменять значения на месте, перебирайте &mut v, а сам вектор должен быть объявлен как mut. Каждый n является изменяемой ссылкой, поэтому для присваивания его нужно разыменовать с помощью *.
Здесь каждый элемент удваивается.
fn main() {
let mut v = vec![1, 2, 3];
for n in &mut v {
*n *= 2;
}
println!("{:?}", v);
}Суммирование вектора
Итераторы упрощают математические операции. Метод iter().sum() складывает все элементы.
Rust должен знать тип результата, поэтому мы указываем для общей суммы тип i32.
fn main() {
let v = vec![10, 20, 30];
let total: i32 = v.iter().sum();
println!("sum = {}", total);
}Первый и последний элементы
Методы first() и last() возвращают ссылки типа Option на первый и последний элементы вектора. Если вектор пуст, они возвращают None.
Это позволяет обойтись без ручных вычислений индексов и сбоев из-за выхода за границы.
fn main() {
let v = vec![7, 8, 9];
println!("{:?}", v.first());
println!("{:?}", v.last());
}Поиск с помощью contains
Чтобы проверить наличие значения, используйте contains. Он принимает ссылку на значение и возвращает логическое значение.
Этот метод просматривает вектор и позволяет быстро проверить, входит ли значение в него.
fn main() {
let v = vec![3, 6, 9];
println!("has 6? {}", v.contains(&6));
println!("has 5? {}", v.contains(&5));
}Срез диапазона
Срез заимствует часть вектора с помощью диапазона, например &v[1..3]. Начало диапазона включается, а конец — нет.
Срезы позволяют работать с частью элементов без их копирования.
fn main() {
let v = vec![10, 20, 30, 40];
let middle = &v[1..3];
println!("{:?}", middle);
}Быстрая проверка
Проверьте, насколько хорошо вы поняли работу с индексами и итерацией.
Повторение
Вы читали элементы по индексу, безопасно обращались к ним с помощью get и выполняли циклы с for, enumerate и &mut.
Вы также использовали sum, first, last, contains и срезы. Далее вы научитесь увеличивать и уменьшать размер векторов.
Часто задаваемые вопросы
Урок «Индексация и итерация» бесплатный?
Да — полный текст урока «Индексация и итерация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.
Чему я научусь в уроке «Индексация и итерация»?
Обращайтесь к элементам и перебирайте их. Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn Rust Coding?
Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Индексация и итерация»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn Rust Coding?
Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание и заполнение векторов
- Индексация и итерация
- Увеличение и уменьшение
- Векторы структур