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

Метод cycle

Метод cycle относится к трейту Iterator и создаёт новый итератор, который бесконечно повторяет элементы исходного итератора. После того как исходный итератор исчерпан, он начинает перебирать элементы заново с самого начала. Метод не принимает параметров и возвращает значение типа Cycle, которое реализует трейт Iterator.

Важно учитывать, что метод cycle требует, чтобы элементы исходного итератора реализовывали трейт Clone. Это связано с тем, что при повторном проходе элементы клонируются, чтобы их можно было выдавать снова.

Синтаксис

iterator.cycle()

Пример

Давайте создадим итератор из вектора vec![1, 2, 3] и применим к нему метод cycle. Затем возьмём первые семь элементов с помощью метода take и соберём их в вектор:

fn main() { let res: Vec<i32> = vec![1, 2, 3].into_iter().cycle().take(7).collect(); println!("{:?}", res); }

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

[1, 2, 3, 1, 2, 3, 1]

Пример

Давайте применим метод cycle к итератору строкового вектора vec!["a", "b", "c"] и возьмём первые пять элементов:

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

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

["a", "b", "c", "a", "b"]

Пример

Давайте используем метод cycle вместе с методом enumerate, чтобы пронумеровать повторяющиеся элементы и вывести первые шесть пар индекс-значение:

fn main() { let iter = vec![10, 20].into_iter().cycle().enumerate().take(6); for (i, val) in iter { println!("{}: {}", i, val); } }

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

0: 10 1: 20 2: 10 3: 20 4: 10 5: 20

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

  • метод take,
    который ограничивает количество элементов итератора
  • метод chain,
    который объединяет два итератора в один
  • метод enumerate,
    который добавляет индекс к каждому элементу итератора
  • метод rev,
    который разворачивает итератор в обратном порядке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить