当前位置 : 主页 > 手机开发 > 其它 >

数组 – 在Swift中重复数组

来源:互联网 收集:自由互联 发布时间:2021-06-11
在 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,
在 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,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)或类似方法,则可以避免这种歧义.

网友评论