Функция slidingWindow

Функция slidingWindow создает последовательность "скользящих окон" - подсписков фиксированного размера, которые перемещаются по исходной коллекции с заданным шагом. Применяется к коллекциям и возвращает последовательность списков List.

Импорт

kotlinimport kotlin.collections.slidingWindow

Синтаксис

kotlinfun <T> Iterable<T>.slidingWindow(
  size: Int,
  step: Int = 1,
  partialWindows: Boolean = false
): Sequence<List<T>>

Параметры

size - размер окна (количество элементов в каждом подсписке);

step - шаг перемещения окна (по умолчанию 1);

partialWindows - включать ли неполные окна в конце коллекции (по умолчанию false).

Пример

Создадим скользящие окна размера 3 с шагом 1 из списка чисел:

kotlinval numbers = listOf(1, 2, 3, 4, 5)
val windows = numbers.slidingWindow(3, 1)

for (window in windows) {
  println(window)
}

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

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

Пример

Создадим скользящие окна размера 2 с шагом 2:

kotlinval numbers = listOf(1, 2, 3, 4, 5)
val windows = numbers.slidingWindow(2, 2)

for (window in windows) {
  println(window)
}

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

kotlin[1, 2]
[3, 4]

Пример

Использование параметра partialWindows для включения неполных окон:

kotlinval numbers = listOf(1, 2, 3, 4, 5)
val windows = numbers.slidingWindow(3, 2, true)

for (window in windows) {
  println(window)
}

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

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

Пример

Работа со строками - создание n-грамм:

kotlinval text = "abcde"
val trigrams = text.toList().slidingWindow(3)

for (trigram in trigrams) {
  println(trigram.joinToString(""))
}

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

kotlinabc
bcd
cde

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

  • функцию windowed,
    которая предоставляет расширенный функционал для создания окон
  • функцию chunked,
    которая разбивает коллекцию на части фиксированного размера
  • функцию partition,
    которая разделяет коллекцию на две части по условию