Swift: как правильно разделить [String], чтобы получить [[String]] с данным примером? - PullRequest
0 голосов
/ 09 мая 2020

Начиная с большой [String] и заданного размера подмассива, как лучше всего go разбить этот массив на более мелкие? (Последний массив будет меньше, чем указанный размер подмассива).

Конкретный пример: Split up [«1», «2», «3», «4», «5», «6», «7», «8», «9»] с максимальным размером разделения 4

Код будет производить [[«1», «2», «3», «4»], [«4» , «5», «6», «7»], [«7», «8», «9»]]

Очевидно, я мог бы сделать это немного вручную, но мне кажется, что в быстром что-то вроде map () или reduce () может делать то, что я хочу, очень красиво.

1 Ответ

0 голосов
/ 09 мая 2020

Вы можете map по индексам в ваш массив:

extension Array {
    func chunked(size: Int) -> [[Element]] {
        let cnt = self.count
        return stride(from: 0, to: cnt, by: size).map {
            let end = Swift.min($0 + size, cnt)
            return Array(self[$0..<end])
        }
    }
}

["1","2","3","4","5","6","7","8","9"].chunked(size: 4)
// -> [["1", "2", "3", "4"], ["5", "6", "7", "8"], ["9"]]

["1","2","3","4","5","6","7","8","9"].chunked(size: 3)
// -> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]

...