Learn Rust Coding · Урок

Итерация по коллекциям

for и итераторы

Урок 4 из 413 шагов

«Итерация по коллекциям» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Цикл for

Цикл for — самый простой способ посетить каждый элемент коллекции.

fn main() {
    let nums = vec![1, 2, 3];
    for n in &nums {
        println!("{}", n);
    }
}

Перебор диапазонов

Диапазоны создают последовательность, которую можно перебирать. 1..5 не включает конечное значение, а 1..=5 включает его.

fn main() {
    for i in 1..=3 {
        println!("i = {}", i);
    }
}

Метод iter

Вызов .iter() создаёт итератор, возвращающий ссылки на каждый элемент. Итераторы ленивы и начинают работу только при потреблении.

fn main() {
    let v = vec![10, 20, 30];
    let mut it = v.iter();
    println!("{:?}", it.next());
    println!("{:?}", it.next());
}

Три способа перебора

Векторы поддерживают три способа итерации:

  • iter() — возвращает &T (заимствование).
  • iter_mut() — возвращает &mut T (изменяемое заимствование).
  • into_iter() — возвращает T (получает владение).
fn main() {
    let v = vec![1, 2, 3];
    for x in v.into_iter() {
        println!("owned {}", x);
    }
}

Преобразование с помощью map

map применяет замыкание к каждому элементу и создаёт новый итератор. Используйте collect, чтобы собрать результаты.

fn main() {
    let v = vec![1, 2, 3];
    let squared: Vec<i32> = v.iter().map(|x| x * x).collect();
    println!("{:?}", squared);
}

Отбор с помощью filter

filter оставляет только те элементы, для которых замыкание возвращает значение true.

fn main() {
    let v = vec![1, 2, 3, 4, 5];
    let odds: Vec<i32> = v.into_iter().filter(|x| x % 2 == 1).collect();
    println!("{:?}", odds);
}

Агрегирование с помощью sum и count

Методы, потребляющие итератор, сводят его к одному значению, например с помощью sum, count, max и min.

fn main() {
    let v = vec![4, 8, 15, 16];
    let total: i32 = v.iter().sum();
    let how_many = v.iter().count();
    println!("sum {} count {}", total, how_many);
}

Объединение адаптеров

Методы итераторов можно объединять в понятную цепочку операций. Каждый шаг преобразует поток перед его окончательным потреблением.

fn main() {
    let v = vec![1, 2, 3, 4, 5, 6];
    let result: i32 = v.iter()
        .filter(|x| *x % 2 == 0)
        .map(|x| x * 10)
        .sum();
    println!("{}", result);
}

enumerate для индексов

enumerate объединяет каждый элемент с его индексом и возвращает кортежи (index, value).

fn main() {
    let letters = vec!['a', 'b', 'c'];
    for (i, ch) in letters.iter().enumerate() {
        println!("{}: {}", i, ch);
    }
}

Перебор HashMap

Итераторы работают и с картами. При переборе возвращаются кортежи ключ-значение.

use std::collections::HashMap;

fn main() {
    let mut m = HashMap::new();
    m.insert("a", 1);
    m.insert("b", 2);
    for (k, v) in &m {
        println!("{} -> {}", k, v);
    }
}

Цикл for и методы итераторов

Обычный цикл for отлично подходит для побочных эффектов, например вывода. Адаптеры итераторов (map, filter, sum) особенно полезны, когда нужно преобразовать данные в новое значение.

fn main() {
    let v = vec![2, 4, 6];
    let doubled: Vec<i32> = v.iter().map(|x| x * 2).collect();
    for x in &doubled {
        println!("{}", x);
    }
}

Быстрая проверка

Вспомните назначение адаптеров итераторов.

Повторение

Итерация по коллекциям в Rust:

  • for x in &collection для простых циклов.
  • iter, iter_mut, into_iter управляют заимствованием.
  • Адаптеры: map, filter, enumerate.
  • Потребители: collect, sum, count, max.
fn main() {
    let prices = vec![10, 25, 40];
    let with_tax: Vec<i32> = prices.iter().map(|p| p + p / 5).collect();
    let total: i32 = with_tax.iter().sum();
    println!("{:?} total {}", with_tax, total);
}
Можно начать бесплатно

Изучай Rust с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
39
Уроки
144

Часто задаваемые вопросы

Урок «Итерация по коллекциям» бесплатный?

Да — полный текст урока «Итерация по коллекциям» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Итерация по коллекциям»?

for и итераторы Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Итерация по коллекциям»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Векторы
  2. Строки и &str
  3. HashMaps
  4. Итерация по коллекциям
← Назад к Learn Rust Coding