Kotlinには、リストや文字列を一定の幅(window)で区切るためのwindowed
関数があります。
スライディングウィンドウのように重なりを持たせて分割することも可能で、データ処理や分析の際に役立ちます。
基本的な使い方(重複ありのスライディングウィンドウ)
Kotlin
val numbers = listOf(1, 2, 3, 4, 5)
val windows = numbers.windowed(3)
println(windows)
// 出力: [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
windowed(サイズ)
で、指定サイズのスライディングウィンドウを作成- デフォルトでは1つずつずらして、重複ありで分割されます
ステップ(間隔)を指定する
Kotlin
val stepped = numbers.windowed(size = 3, step = 2)
println(stepped)
// 出力: [[1, 2, 3], [3, 4, 5]]
step
引数で、何個ずつずらして分割するかを設定可能
部分が足りない場合も含める(partialWindows)
Kotlin
val partial = numbers.windowed(3, step = 2, partialWindows = true)
println(partial)
// 出力: [[1, 2, 3], [3, 4, 5], [5]]
partialWindows = true
を指定すると、最後に足りない部分もウィンドウとして含める
文字列にも使える
Kotlin
val text = "abcdef"
val result = text.windowed(2)
println(result)
// 出力: [ab, bc, cd, de, ef]
- 文字列にも同様に使え、部分文字列の抽出やパターン処理に便利
まとめ
windowed
は以下のような用途で便利です:
- 時系列データの範囲処理(例:移動平均)
- 入力データのスライス
- テキスト処理やバイナリ解析の前処理
柔軟なウィンドウサイズ、ステップ、端数の扱いまで設定できるため、データ分析やパターン認識にも使いやすい関数です。
複数要素をまとめて扱いたいときには、ぜひwindowed
を活用してください。