Look at fixed-size windows across a sequence.

sliding-window `sliding` walks a fixed-size window across the sequence one step at a time. Summing each window turns the chunks into scalar values.

Sliding Windows

size
SlidingWindow.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val size = 2
    val nums = List(1, 2, 3, 4)
    val windows = nums.sliding(size).toList
    val sums = windows.map(w => w.sum)

    println("count=" + windows.length)
    println("sums=" + sums.mkString(","))
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val size = 1
    val nums = List(1, 2, 3, 4)
    val windows = nums.sliding(size).toList
    val sums = windows.map(w => w.sum)

    println("count=" + windows.length)
    println("sums=" + sums.mkString(","))
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val size = 3
    val nums = List(1, 2, 3, 4)
    val windows = nums.sliding(size).toList
    val sums = windows.map(w => w.sum)

    println("count=" + windows.length)
    println("sums=" + sums.mkString(","))
  }
}
  1. size ← 2, nums ← List(1, 2, 3, 4), windows ← List(List(1, 2), List(2, 3), List(3, 4))

    1object Main {2  def main(args: Array[String]): Unit = {3    val size→ 2 = 2 //@size=1, 34    val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5    val windows→ List(List(1, 2), List(2, 3), List(3, 4)) = numsList(1, 2, 3, 4).sliding(size2).toList6    val sums→ List(3, 5, 7) = windowsList(List(1, 2), List(2, 3), List(3, 4)).map(w => w.sum)78    println("count=" + windows.length3)9    println("sums=" + sumsList(3, 5, 7).mkString(","))10  }11}
    outputcount=3
    sums=3,5,7
  1. size ← 1, nums ← List(1, 2, 3, 4), windows ← List(List(1), List(2), List(3), List(4))

    1object Main {2  def main(args: Array[String]): Unit = {3    val size→ 1 = 14    val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5    val windows→ List(List(1), List(2), List(3), List(4)) = numsList(1, 2, 3, 4).sliding(size1).toList6    val sums→ List(1, 2, 3, 4) = windowsList(List(1), List(2), List(3), List(4)).map(w => w.sum)78    println("count=" + windows.length4)9    println("sums=" + sumsList(1, 2, 3, 4).mkString(","))10  }11}
    outputcount=4
    sums=1,2,3,4
  1. size ← 3, nums ← List(1, 2, 3, 4), windows ← List(List(1, 2, 3), List(2, 3, 4))

    1object Main {2  def main(args: Array[String]): Unit = {3    val size→ 3 = 34    val nums→ List(1, 2, 3, 4) = List(1, 2, 3, 4)5    val windows→ List(List(1, 2, 3), List(2, 3, 4)) = numsList(1, 2, 3, 4).sliding(size3).toList6    val sums→ List(6, 9) = windowsList(List(1, 2, 3), List(2, 3, 4)).map(w => w.sum)78    println("count=" + windows.length2)9    println("sums=" + sumsList(6, 9).mkString(","))10  }11}
    outputcount=2
    sums=6,9