I have an array with shapes of different colors. I need to split an array into multiple arrays without repeating the number of elements. Right now I'm using:
extension Array {
func split(into size: Int) -> [[Element]] {
return (0..<size).map {
stride(from: $0, to: count, by: size).map { self[$0] }
}
}
}
The result can sometimes be something like this: [[8],[8],[4]] or [[6],[3],[6]] Need: [[9],[7],[4]] and [[5],[4],[6]]
Edit: This is how the function that returns an array with shapes looks like
fileprivate func getTreasureElements(totalCount: Int,
colors: [MysteriosTreasureElementColor],
colorsCount: Int,
figuresCount: Int) -> [MysteriosTreasureElement] {
var elements: [MysteriosTreasureElement] = []
let circleFigure = MysteriosTreasureElementFigure.circle
let randomColor = MysteriosTreasureElementColor.allCases.randomElement()!
let randomFigure = MysteriosTreasureElementFigure.allCases.randomElement()!
let newElement = MysteriosTreasureElement(icon: UIImage(named: "treasureIcon_\(randomColor)_\(circleFigure)")!,
color: randomColor,
figure: randomFigure)
for _ in 0...totalCount+1 {
elements.append(newElement)
}
var chunkedElements = elements.split(into: colorsCount)
var result: [MysteriosTreasureElement] = []
switch colorsCount {
case 2:
chunkedElements[0] = randomizeFigures(count: chunkedElements[0].count,
color: colors[0])
chunkedElements[1] = randomizeFigures(count: chunkedElements[1].count,
color: colors[1])
result = Array(chunkedElements.joined())
case 3:
chunkedElements[0] = randomizeFigures(count: chunkedElements[0].count,
color: colors[0])
chunkedElements[1] = randomizeFigures(count: chunkedElements[1].count,
color: colors[1])
chunkedElements[2] = randomizeFigures(count: chunkedElements[2].count,
color: colors[2])
result = Array(chunkedElements.joined())
case 4:
chunkedElements[0] = randomizeFigures(count: chunkedElements[0].count,
color: colors[0])
chunkedElements[1] = randomizeFigures(count: chunkedElements[1].count,
color: colors[1])
chunkedElements[2] = randomizeFigures(count: chunkedElements[2].count,
color: colors[2])
chunkedElements[3] = randomizeFigures(count: chunkedElements[3].count,
color: colors[3])
result = Array(chunkedElements.joined())
case 5:
chunkedElements[0] = randomizeFigures(count: chunkedElements[0].count,
color: colors[0])
chunkedElements[1] = randomizeFigures(count: chunkedElements[1].count,
color: colors[1])
chunkedElements[2] = randomizeFigures(count: chunkedElements[2].count,
color: colors[2])
chunkedElements[3] = randomizeFigures(count: chunkedElements[3].count,
color: colors[3])
chunkedElements[4] = randomizeFigures(count: chunkedElements[4].count,
color: colors[4])
result = Array(chunkedElements.joined())
default:
break
}
while result.count > totalCount {
result.removeLast()
}
return result.shuffled()
}