Итерация по коллекциям
for и итераторы
«Итерация по коллекциям» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Векторы
- Строки и &str
- HashMaps
- Итерация по коллекциям