在 Python中,我可以创建一个这样的重复列表: [1,2,3]*3[1, 2, 3, 1, 2, 3, 1, 2, 3] 在Swift中有一个简洁的方法吗? 我能做的最好的事情是: 1 var r = [Int]()r: [Int] = 0 values 2 for i in 1...3 { 3. r += [1,
>>> [1,2,3]*3 [1, 2, 3, 1, 2, 3, 1, 2, 3]
在Swift中有一个简洁的方法吗?
我能做的最好的事情是:
1> var r = [Int]() r: [Int] = 0 values 2> for i in 1...3 { 3. r += [1,2,3] 4. } 5> print(r) [1, 2, 3, 1, 2, 3, 1, 2, 3]您可以创建一个2D数组,然后使用flatMap将其转换为一维数组:
let array = [Int](repeating: [1,2,3], count: 3).flatMap{$0}
这是一个扩展,它添加了一个init方法和一个重复方法,该方法采用一个使得它更清洁的数组:
extension Array { init(repeating: [Element], count: Int) { self.init([[Element]](repeating: repeating, count: count).flatMap{$0}) } func repeated(count: Int) -> [Element] { return [Element](repeating: self, count: count) } } let array = [1,2,3].repeated(count: 3) // => [1, 2, 3, 1, 2, 3, 1, 2, 3]
请注意,使用新的初始化程序,如果在不提供预期类型的情况下使用它,则可以获得模糊的方法调用:
let array = Array(repeating: [1,2,3], count: 3) // Error: Ambiguous use of ‛init(repeating:count:)‛
改为使用:
let array = [Int](repeating: [1,2,3], count: 3) // => [1, 2, 3, 1, 2, 3, 1, 2, 3]
要么
let array:[Int] = Array(repeating: [1,2,3], count: 3) // => [1, 2, 3, 1, 2, 3, 1, 2, 3]
如果将方法签名更改为init(repeatingContentsOf:[Element],count:Int)或类似方法,则可以避免这种歧义.