分块(chunked) vs 滑动窗口(windowed)

在 Kotlin 中,chunked()(分块)和 windowed()(滑动窗口)都是用于将集合拆分成子集合的方法,但它们的工作方式和应用场景不同


chunked()(分块)

  • 含义:将集合划分为一个个不重叠的子块(chunk),每个子块长度相等(最后一个块可能不足)。

  • 特点无重叠一步跳跃一个块

  • 函数签名fun <T> Iterable<T>.chunked(size: Int): List<List<T>>

示例:

val list = listOf(1, 2, 3, 4, 5, 6, 7)
val chunks = list.chunked(3)
println(chunks) // 输出: [[1, 2, 3], [4, 5, 6], [7]]

windowed()(滑动窗口)

含义:使用一个窗口在集合上滑动,可以重叠,可以设置滑动的步长。

特点:可重叠、可定步长、可以控制是否包含不足窗口长度的子集合。

函数签名:
    fun <T> Iterable<T>.windowed(
    size: Int,
    step: Int = 1,
    partialWindows: Boolean = false
): List<List<T>>

示例 1:默认滑动步长为 1(有重叠)

val list = listOf(1, 2, 3, 4, 5)
val windows = list.windowed(3)
println(windows) // 输出: [[1, 2, 3], [2, 3, 4], [3, 4, 5]]

示例 2:设置步长为 2(可能不重叠)

val windows = list.windowed(3, step = 2)
println(windows) // 输出: [[1, 2, 3], [3, 4, 5]]

示例 3:保留不足窗口大小的部分(partialWindows

val windows = list.windowed(3, step = 2, partialWindows = true)
println(windows) // 输出: [[1, 2, 3], [3, 4, 5], [5]]

📌 总结对比:

特性chunked()windowed()
子集合是否重叠❌ 不重叠✅ 可重叠
步长控制❌ 不可指定步长✅ 可指定步长 step
不足长度是否保留✅ 自动保留最后一组✅ 需设定 partialWindows = true
使用场景分组处理(如分页)滑动窗口分析(如模式识别、时间序列)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值