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