АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP, Python или фреймворки. Сегодня последний день для записи! Жми!
454 of 1310 menu
Вступайте в телеграмм-канал сайта code.mu: новинки, статьи, интервью, задачи, бесплатные курсы и тренинги. Жми для вступления:)

Функция windowed

Функция windowed создает последовательность "окон" - подсписков заданного размера, которые перемещаются по коллекции с указанным шагом. Принимает параметры: size - размер окна, step - шаг перемещения, partialWindows - включать ли неполные окна в конце. Работает с коллекциями: List, Array, String.

Синтаксис

fun <T> Iterable<T>.windowed( size: Int, step: Int = 1, partialWindows: Boolean = false ): List<List<T>>
fun <T> Array<T>.windowed( size: Int, step: Int = 1, partialWindows: Boolean = false ): List<List<T>>
fun String.windowed( size: Int, step: Int = 1, partialWindows: Boolean = false ): List<String>

Пример

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

val numbers = listOf(1, 2, 3, 4, 5) val res = numbers.windowed(3) println(res)

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

List<List<Int>> [[1, 2, 3], [2, 3, 4], [3, 4, 5]]

Пример

Создадим окна размера 3 с шагом 2 из массива символов:

val chars = arrayOf('a', 'b', 'c', 'd', 'e') val res = chars.windowed(3, 2) println(res)

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

List<List<Char>> [['a', 'b', 'c'], ['c', 'd', 'e']]

Пример

Создадим окна размера 3 с шагом 1, включая неполные окна:

val numbers = listOf(1, 2, 3, 4) val res = numbers.windowed(3, 1, true) println(res)

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

List<List<Int>> [[1, 2, 3], [2, 3, 4], [3, 4], [4]]

Пример

Использование windowed со строкой:

val text = "abcde" val res = text.windowed(3) println(res)

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

List<String> ["abc", "bcd", "cde"]

Пример

Обработка каждого окна с преобразованием:

val numbers = listOf(1, 2, 3, 4, 5) val res = numbers.windowed(3).map { it.sum() } println(res)

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

List<Int> [6, 9, 12]

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

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