РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
568 of 1245 menu

Трейт IntoIterator

Трейт IntoIterator описывает преобразование значения в итератор. Если тип реализует этот трейт, то его значения можно перебирать в цикле for, передавать в методы, принимающие итераторы, и использовать в цепочках адаптеров. Трейт содержит связанный тип Item (тип элементов итератора), связанный тип IntoIter (тип самого итератора) и метод into_iter, который и выполняет преобразование. Метод не принимает параметров и возвращает значение типа IntoIter.

Синтаксис

trait IntoIterator { type Item; type IntoIter: Iterator<Item = Self::Item>; fn into_iter(self) -> Self::IntoIter; }

Трейт реализован для многих стандартных типов: для векторов, массивов, срезов, строк, диапазонов, хеш-таблиц и других коллекций. При этом реализация может быть выполнена как для самого типа, так и для ссылки на него.

Пример

Давайте преобразуем вектор в итератор и переберём его элементы с помощью цикла for:

fn main() { let vec = vec![1, 2, 3, 4, 5]; for item in vec { println!("{}", item); } }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте вызовем метод into_iter явно и соберём элементы вектора в новый вектор с помощью метода collect:

fn main() { let vec = vec!["a", "b", "c", "d", "e"]; let res: Vec<&str> = vec.into_iter().collect(); println!("{:?}", res); }

Результат выполнения кода:

["a", "b", "c", "d", "e"]

Пример

Давайте реализуем трейт IntoIterator для собственной структуры, чтобы её можно было перебирать в цикле:

struct Counter { count: u32, } impl IntoIterator for Counter { type Item = u32; type IntoIter = std::ops::Range<u32>; fn into_iter(self) -> Self::IntoIter { 0..self.count } } fn main() { let counter = Counter { count: 5 }; for item in counter { println!("{}", item); } }

Результат выполнения кода:

0 1 2 3 4

Смотрите также

  • трейт Trait,
    который описывает общее поведение типов
  • трейт FromIterator,
    который собирает коллекцию из итератора
  • трейт impl Trait,
    который позволяет возвращать итераторы из функций
  • трейт Trait Bound,
    который задаёт ограничения на обобщённые типы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить