0Pricing
Learn Rust Coding · Урок

Индексация и итерация

Обращайтесь к элементам и перебирайте их.

«Индексация и итерация» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Создание и заполнение векторов
  2. Индексация и итерация
  3. Увеличение и уменьшение
  4. Векторы структур
← Назад к Learn Rust Coding