2016-03-20 12 views
4

Ich habe ein Array von sechs Farben und ein weiteres Array von 8 Elementen. Gibt es eine Möglichkeit, die FarbenArray als die Anzahl der Elemente beginnend mit der ersten Farbe bei colorsArray in der gleichen Reihenfolge zu wiederholen?Wie erstellt man ein Array von Farben, das sich dynamisch wiederholt?

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

das neue Array würde wie folgt aussehen:

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

Antwort

2

Sie sollten nur die Elemente auf der rechten Seite, um Ihr neues Array hinzufügen

var colorsArray = [UIColor.redColor(), 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) 
1

Sie können ein colorsArray leicht wiederholen:

colorsArray = colorsArray + colorsArray 

Dann können Sie Ergebnis auf 8 Artikel einschränken:

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

sie alle zusammen in 1 Zeile Code Putting:

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

Mai gibt es einige weitere bessere Option, aber diese können Ihnen helfen:

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

print(newColorsArrayByItemsNumber) 
1

Sie können die Anzahl der gewünschten Elemente durch die Anzahl der Elemente des ursprünglichen Arrays teilen. Als nächstes müssen Sie eine Kopie der Elemente an das resultierende Array anhängen, wenn numberOfElements> count nur die zusätzlichen Elemente oder die verbleibende Scheibe des Arrays anhängen.

let colorsArray = [UIColor.redColor(), 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]" 
0

Ich verwende eine Erweiterung, weil dieses Muster, das ich jedes Mal kommen immer wieder brauchen mehr als ein Element wiederholt:

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.redColor(), UIColor.purpleColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor(), UIColor.orangeColor()] 

var newColorsArray = [UIColor](count: 8, repeatedValues: colorsArray) 
Verwandte Themen