Функция 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
,
которая разделяет коллекцию на две части по условию