windowed所在位置是kotlin.text.windowed,其相關用法介紹如下。

用法一

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

返回給定 size 窗口的快照列表,使用給定的 step 沿此字符序列滑動,其中每個快照都是一個字符串。

最後幾個字符串的字符數可能少於給定的 size

sizestep 都必須為正數,並且可以大於此字符序列中的元素數。

例子:

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
val sequence = generateSequence(1) { it + 1 }

val windows = sequence.windowed(size = 5, step = 1)
println(windows.take(4).toList()) // [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]

val moreSparseWindows = sequence.windowed(size = 5, step = 3)
println(moreSparseWindows.take(4).toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11], [10, 11, 12, 13, 14]]

val fullWindows = sequence.take(10).windowed(size = 5, step = 3)
println(fullWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8]]

val partialWindows = sequence.take(10).windowed(size = 5, step = 3, partialWindows = true)
println(partialWindows.toList()) // [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10], [10]]
//sampleEnd
}

輸出:

[[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]]
[[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11], [10, 11, 12, 13, 14]]
[[1, 2, 3, 4, 5], [4, 5, 6, 7, 8]]
[[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10], [10]]

參數

size- 每個窗口中的元素數量

step- 每一步向前移動窗口的元素數,默認為 1

partialWindows- 控製是否在最後保留部分窗口,如果有的話,默認情況下false這意味著不會保留部分窗口

用法二

fun <R> CharSequence.windowed(
    size: Int, 
    step: Int = 1, 
    partialWindows: Boolean = false, 
    transform: (CharSequence) -> R
): List<R>

返回將給定 transform 函數應用於表示給定 size 窗口上的視圖的每個字符序列的結果列表,並使用給定的 step 沿著此字符序列滑動。

請注意,傳遞給transform 函數的字符序列是短暫的,僅在該函數內部有效。您不應該存儲它或讓它以某種方式逃逸,除非您製作了它的快照。幾個最後一個字符序列的字符可能比給定的 size 少。

sizestep 都必須為正數,並且可以大於此字符序列中的元素數。

例子:

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
val dataPoints = sequenceOf(10, 15, 18, 25, 19, 21, 14, 8, 5)

val averaged = dataPoints.windowed(size = 4, step = 1, partialWindows = true) { window -> window.average() }
println(averaged.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0, 9.0, 6.5, 5.0]

val averagedNoPartialWindows = dataPoints.windowed(size = 4, step = 1).map { it.average() }
println(averagedNoPartialWindows.toList()) // [17.0, 19.25, 20.75, 19.75, 15.5, 12.0]
//sampleEnd
}

輸出:

[17.0, 19.25, 20.75, 19.75, 15.5, 12.0, 9.0, 6.5, 5.0]
[17.0, 19.25, 20.75, 19.75, 15.5, 12.0]

參數

size- 每個窗口中的元素數量

step- 每一步向前移動窗口的元素數,默認為 1

partialWindows- 控製是否在最後保留部分窗口,如果有的話,默認情況下false這意味著不會保留部分窗口