¿Cómo crear una matriz de colors que se repite dinámicamente?

Tengo una matriz de seis colors y otra matriz de 8 elementos. ¿Hay alguna forma de repetir el array de colors como el número de elementos que comienzan desde el primer color en colorsArray en el mismo order?

var colorsArray = [UIColor.networkingColor(), UIColor.purpleColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.orangeColor()]; 

la nueva matriz se vería así:

 newColorsArrayByItemsNumber = [UIColor.networkingColor(), UIColor.purpleColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.orangeColor(), UIColor.networkingColor(), UIColor.purpleColor()]; 

Solo debe agregar los elementos en el order correcto a su nueva matriz

 var colorsArray = [UIColor.networkingColor(), UIColor.purpleColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.orangeColor()] var newColorsArrayByItemsNumber:[AnyObject] = [] let itemCount = 8 for(var i=0;i<itemCount;i++) { newColorsArrayByItemsNumber.append(colorsArray[i % colorsArray.count]) } print(newColorsArrayByItemsNumber) 

Puede repetir fácilmente un array de colors:

 colorsArray = colorsArray + colorsArray 

Entonces, puede limitar el resultado a 8 elementos:

 colorsArray = Array(colorsArray[0...7]) 

Poniéndolo todo en una sola línea de código:

 colorsArray = Array(colorsArray + colorsArray[0...1]) 

Puede dividir los numbers de elementos deseados por la cantidad de elementos de la matriz original. A continuación, debe agregar una copy de los elementos a la matriz resultante si numberOfElements> count simplemente anexa los elementos adicionales o la porción restante de la matriz.

 let colorsArray = [UIColor.networkingColor(), UIColor.purpleColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.orangeColor()] extension Array { func replicateUpTo(numberOfElements: UInt) -> [Element] { if Int(numberOfElements) < count { return Array(self[0..<Int(numberOfElements)]) } else { var result = self (0..<(Int(numberOfElements)/result.count)-1).forEach({ _ in result += self}) return result + self[0..<(Int(numberOfElements) - (Int(numberOfElements)/count) * count)] } } } colorsArray.replicateUpTo(8) // "[r 1,0 g 0,0 b 0,0 a 1,0, r 0,5 g 0,0 b 0,5 a 1,0, r 0,0 g 0,0 b 1,0 a 1,0, r 0,0 g 1,0 b 0,0 a 1,0, r 1,0 g 1,0 b 0,0 a 1,0, r 1,0 g 0,5 b 0,0 a 1,0, r 1,0 g 0,0 b 0,0 a 1,0, r 0,5 g 0,0 b 0,5 a 1,0]" 

Puede que haya alguna opción más mejor pero esta puede ayudarlo:

 var i = 0 repeat{ newColorsArrayByItemsNumber.append(colorsArray[i % colorsArray.count]) i++ }while(newColorsArrayByItemsNumber.count<8) print(newColorsArrayByItemsNumber) 

Uso una extensión porque este patrón sigue volviendo cada vez que necesito repetir más de un elemento:

 extension Array { init?(count: Int, repeatedValues: [Element]) { var arr = [Element]() for _ in 0...(count/repeatedValues.count) { arr += repeatedValues } self = Array(arr[0..<count]) } } let colorsArray = [UIColor.networkingColor(), UIColor.purpleColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.orangeColor()] var newColorsArray = [UIColor](count: 8, repeatedValues: colorsArray)