Функция slidingWindow
Функция slidingWindow создает последовательность
"скользящих окон" - подсписков фиксированного размера,
которые перемещаются по исходной коллекции с заданным шагом.
Применяется к коллекциям и возвращает последовательность
списков List.
Импорт
import kotlin.collections.slidingWindow
Синтаксис
fun <T> Iterable<T>.slidingWindow(
size: Int,
step: Int = 1,
partialWindows: Boolean = false
): Sequence<List<T>>
Параметры
size - размер окна (количество элементов в каждом подсписке);
step - шаг перемещения окна (по умолчанию 1);
partialWindows - включать ли неполные окна в конце коллекции
(по умолчанию false).
Пример
Создадим скользящие окна размера 3 с шагом 1 из списка чисел:
val numbers = listOf(1, 2, 3, 4, 5)
val windows = numbers.slidingWindow(3, 1)
for (window in windows) {
println(window)
}
Результат выполнения кода:
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
Пример
Создадим скользящие окна размера 2 с шагом 2:
val numbers = listOf(1, 2, 3, 4, 5)
val windows = numbers.slidingWindow(2, 2)
for (window in windows) {
println(window)
}
Результат выполнения кода:
[1, 2]
[3, 4]
Пример
Использование параметра partialWindows для включения
неполных окон:
val numbers = listOf(1, 2, 3, 4, 5)
val windows = numbers.slidingWindow(3, 2, true)
for (window in windows) {
println(window)
}
Результат выполнения кода:
[1, 2, 3]
[3, 4, 5]
[5]
Пример
Работа со строками - создание n-грамм:
val text = "abcde"
val trigrams = text.toList().slidingWindow(3)
for (trigram in trigrams) {
println(trigram.joinToString(""))
}
Результат выполнения кода:
abc
bcd
cde