如何创建一个动态重复的颜色数组?

时间:2016-03-20 14:40:58

标签: ios arrays swift

我有六种颜色的数组和另外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()];

5 个答案:

答案 0 :(得分:2)

您只需将正确顺序的元素添加到新数组

即可
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 :(得分:1)

您可以轻松地重复colorsArray:

colorsArray = colorsArray + colorsArray

然后,您可以将结果限制为8个项目:

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

将所有内容放在一行代码中:

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

答案 2 :(得分:1)

您可以按原始数组的元素数划分所需元素的数量。接下来,如果numberOfElements&gt;,则必须将元素的副本附加到结果数组中。 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]"

答案 3 :(得分:0)

可能有更好的选择,但这个可以帮助你:

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

print(newColorsArrayByItemsNumber)

答案 4 :(得分: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)