Okay You can do it recursively
let input = "001|apple|red|002|banana|yellow|003|grapes|purple"
let array = input.components(separatedBy: "|")
// Get Chunks from array
extension Array {
func getFirstElements(upTo position: Int) -> Array {
let arraySlice = self[0 ..< position]
return Array(arraySlice)
}
}
func recersivelyGetArray (array:[String], slice:inout [[String]]) {
guard !array.isEmpty else{
return
}
var copyArray = array
var chunkSize = 3
if array.count >= 3 {
chunkSize = 3
} else {
chunkSize = array.count
}
let threeElements = copyArray.getFirstElements(upTo: chunkSize)
slice.append(threeElements)
copyArray.removeFirst(chunkSize)
recersivelyGetArray(array: copyArray, slice: &slice)
}
var inoutResult = [[String]]()
recersivelyGetArray(array: array, slice: &inoutResult)
print(inoutResult)
Output
Case 1 For Input
let input = "001|apple|red|002|banana|yellow|003|grapes|purple"
[["001", "apple", "red"], ["002", "banana", "yellow"], ["003", "grapes", "purple"]]
Case 2 For Input
let input = "001|apple|red|002|banana|yellow|003|grapes"
[["001", "apple", "red"], ["002", "banana", "yellow"], ["003", "grapes"]]