配列を一定数毎に分割して返す

一定数刻みで数値のコレクションを返してくれるstride関数を利用して配列を一定数毎に分割するExtensionを作成できる。

RubyのEnumerable#each_sliceに相当する。

import Foundation

extension Array {
    func slice(_ n: Int) -> [ArraySlice<Element>] {
        return stride(from: 0, through: count - 1, by: n).map({ self[($0..<$0+n).clamped(to: self.indices)] })
    }
}

print(Array(1..<10).slice(3).map({ $0.map({ String($0) }).joined(separator: " ") }).joined(separator: "\n"))
// 1 2 3
// 4 5 6
// 7 8 9