Skip to content

Instantly share code, notes, and snippets.

@ericdke
Last active July 10, 2023 09:55
Show Gist options
  • Save ericdke/fa262bdece59ff786fcb to your computer and use it in GitHub Desktop.
Save ericdke/fa262bdece59ff786fcb to your computer and use it in GitHub Desktop.
Swift: split array by chunks of given size
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
extension Array {
func splitBy(subSize: Int) -> [[Element]] {
return 0.stride(to: self.count, by: subSize).map { startIndex in
let endIndex = startIndex.advancedBy(subSize, limit: self.count)
return Array(self[startIndex ..< endIndex])
}
}
}
let chunks = arr.splitBy(5)
print(chunks) // [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12]]
@tiagodocouto
Copy link

would be nice to have a Swift3 version :)

@ppeelen
Copy link

ppeelen commented Sep 29, 2016

What I use for Swift 3.0:

    func chunk(_ chunkSize: Int) -> [[Element]] {
        return stride(from: 0, to: self.count, by: chunkSize).map({ (startIndex) -> [Element] in
            let endIndex = (startIndex.advanced(by: chunkSize) > self.count) ? self.count-startIndex : chunkSize
            return Array(self[startIndex..<startIndex.advanced(by: endIndex)])
        })
    }

@ppeelen
Copy link

ppeelen commented Sep 30, 2016

@amayatsky
Copy link

amayatsky commented Apr 3, 2017

extension Array {
    func chunks(_ chunkSize: Int) -> [[Element]] {
        return stride(from: 0, to: self.count, by: chunkSize).map {
            Array(self[$0..<Swift.min($0 + chunkSize, self.count)])
        }
    }
}

@iHTCboy
Copy link

iHTCboy commented Jun 30, 2018

@ALL thanks! everybody~

@MihaelIsaev
Copy link

You're my hero guys!

@ChetanPote93
Copy link

How to get like this [["1","2","3","4"],["4","5","6","7"],["7","8","9"]]
Each set last item repeat of the start of second set.
Please help.

@Ashish2150
Copy link

extension Array {
    func chunks(_ chunkSize: Int) -> [[Element]] {
        return stride(from: 0, to: self.count, by: chunkSize).map {
            Array(self[$0..<Swift.min($0 + chunkSize, self.count)])
        }
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment