НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
366 of 1310 menu

Функция windowed

Функция windowed создает список всех возможных окон (подпоследовательностей) заданного размера из исходной коллекции. Поддерживает настройку шага перемещения окна, а также возможность частичного заполнения последнего окна. Применяется к строкам, спискам и другим коллекциям.

Синтаксис

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

Параметры

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

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

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

Пример

Создадим окна размером 3 из строки "abcde":

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

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

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

Пример

Используем шаг 2 для создания окон:

val str = "abcde" val res = str.windowed(3, 2) println(res)

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

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

Пример

Разрешим частичные окна в конце последовательности:

val str = "abcde" val res = str.windowed(3, 2, true) println(res)

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

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

Пример

Использование с числовыми коллекциями:

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]]

Пример

Применение преобразования к каждому окну:

val str = "abcde" val res = str.windowed(3).map { it.uppercase() } println(res)

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

List<String> ["ABC", "BCD", "CDE"]

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

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