ループを分割する
スレッド生成等で、[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 } }