ループを分割する

スレッド生成等で、[0, length)のforループをn個のブロックに分割したい場合があります。 スマートな方法を思い出そうとして手間取ったので備忘録としてコードを残しておきます。 n個のブロックに分割ではなくa個づつのブロックに分割したい場合はn=length/aまたはn=(langth+a-1)/aなどとすればOKです。

for block_num in 0..n {
    // block_num ∈ [0, n)
    for index in block_num * length / n..(block_num + 1) * length / n {
        // index ∈ [block_num * length / n, (block_num + 1) * length / n)
        // do something
    }
}