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]]
@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