0からsize-1まで順番にindexが欲しい事がある。 例えばrow col計算とか。

なんか自分はすぐ、

(0..size).forEach{...}

的な事を書きたくなるのだが、これはsizeが含まれちゃってダメじゃん、ってなって「…」演算子が無いよ!となって

(0 until size).forEach {...}

とか書いてしまいがち。もちろんこれは良く無い。

Kotlin的にはrepeatが正しい。

repeat(size).forEach {...}

repeatってどうも0からsize-1まで舐めるって感じが無いので盲点になりがちなのだが、itにはちゃんと0からsize-1が来る。

1.3にはsequence scopeが入ったので、row colでなんかしたい時は、例えば以下みたいになっている。

fun column(colIdx: Int) = sequence {
    val rowSize = shape[1]
    val rowNum = size/rowSize

    repeat(rowNum) {ridx->
        yield(floatArray[ridx*rowSize+colIdx])
    }
}.toList()

まぁまぁやね。

関係無いがsequence scopeが中括弧を導入するので、イコールで書いておきながらローカル変数作れるのはちょっと得した気分。