ひらめの日常

日常のメモをつらつらと

Scalaで競技プログラミング: 累積和

scanLeftはfoldLeftの途中経過の値を保持するような関数。 これを使えば、累積和の計算が簡単にできる。

初期値が一番最初に挿入されるので、元の配列より大きさが+1されていることに注意する。

val a = Array(1, 2, 3)
val d = a.scanLeft(0L)(_ + _)

println(d.mkString("Array(", ", ", ")"))
// Array(0, 1, 3, 6)

Visual Scala Reference はコレクションメソッドを図でわかりやすく解説していておすすめ。 superruzafa.github.io