2016-03-20 9 views
4

私は6色の配列と8個の配列の配列を持っています。 colorsArrayの最初の色から同じ順序で項目の数としてcolorsArrayを繰り返す方法はありますか?動的に繰り返す色の配列を作成するにはどうすればいいですか?

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

新しい配列は次のようになります。

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

答えて

2

あなただけのあなたが簡単にcolorsArrayを繰り返すことができ、あなたの新しい配列

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

に右の順に要素を追加する必要があります。

colorsArray = colorsArray + colorsArray 

コードの1つの行にすべて一緒にそれを置く

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

:次に、あなたは8つの項目に結果を制限することができ

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

は、いくつかのより良いオプションがあるかもしれませんが、これもあなたを助けることができる:

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

print(newColorsArrayByItemsNumber) 
1

元の配列の要素数で、必要な要素の数を分けることができます。次に、numberOfElements> countが余分な要素または配列の残りのスライスを追加するだけであれば、結果の配列に要素のコピーを追加する必要があります。このパターンが続けているので、私は拡張子を使用

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

バック私が必要とするたびに来て、複数の要素が繰り返さ:

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) 
関連する問題