windowedでリストや文字列を範囲ごとに分割する

Kotlin
記事内に広告が含まれる場合があります

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を活用してください。

タイトルとURLをコピーしました