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

Метод windows

Метод windows создаёт итератор, который проходит по срезу и на каждой итерации возвращает подсрез (окно) заданной длины. Параметром метод принимает размер окна - целое число usize. Окна перекрываются: каждое следующее окно сдвигается на один элемент вправо. Если размер окна равен нулю, метод паникует. Если размер окна больше длины среза, итератор не вернёт ни одного элемента.

Синтаксис

slice.windows(size)

Пример

Давайте получим все окна размера 3 из среза [1, 2, 3, 4, 5]:

fn main() { let arr = [1, 2, 3, 4, 5]; for window in arr.windows(3) { println!("{:?}", window); } }

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

[1, 2, 3] [2, 3, 4] [3, 4, 5]

Пример

Давайте получим все окна размера 2 из среза ["a", "b", "c", "d", "e"]:

fn main() { let arr = ["a", "b", "c", "d", "e"]; for window in arr.windows(2) { println!("{:?}", window); } }

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

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

Пример

Давайте соберём все окна в вектор с помощью метода collect:

fn main() { let arr = [1, 2, 3, 4, 5]; let res: Vec<&[i32]> = arr.windows(2).collect(); println!("{:?}", res); }

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

[[1, 2], [2, 3], [3, 4], [4, 5]]

Пример

Если размер окна больше длины среза, итератор не вернёт ни одного элемента. Давайте проверим это на срезе [1, 2, 3] с окном размера 5:

fn main() { let arr = [1, 2, 3]; let count = arr.windows(5).count(); println!("{}", count); }

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

0

Пример

Давайте найдём максимальную сумму среди всех окон размера 3 в срезе [1, 2, 3, 4, 5]:

fn main() { let arr = [1, 2, 3, 4, 5]; let mut max_sum = 0; for window in arr.windows(3) { let sum: i32 = window.iter().sum(); if sum > max_sum { max_sum = sum; } } println!("{}", max_sum); }

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

12

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

  • метод chunks,
    который разбивает срез на неперекрывающиеся куски
  • метод chunks_exact,
    который разбивает срез на куски фиксированного размера без остатка
  • метод split,
    который разбивает срез по предикату
  • метод iter,
    который возвращает итератор по элементам среза
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить