如何在数组的每两个元素之间重复插入一个项目?

时间:2015-03-30 13:04:39

标签: swift functional-programming

我有这段代码:

let items = [1, 2, 3]
let sep = 0

我想在sep的每两个元素之间插入items,以获得与此类似的结果:

newItems = [1, 0, 2, 0, 3]

有没有一种简洁的方法通过Swift中的函数式编程来实现这一点?类似于String.join()的东西,但对于数组。

3 个答案:

答案 0 :(得分:9)

这就是诀窍:

let items = [1, 2, 3]
let sep = 0

let newItems = [sep].join(items.map { [ $0 ] } )

println(newItems) // [1, 0, 2, 0, 3]

items.map { [ $0 ] }创建一个单元素数组数组,然后[sep].join(...)插入分隔符并连接 元素。

另一种可能的解决方案:

let newItems = map(0 ..< 2*items.count - 1) { $0 % 2 == 0 ? items[$0/2] : sep }

将索引映射到items的相应元素, 和分隔符的奇数索引。

假设第二个解决方案表现更好,因为它确实如此 不要创建这么多中间数组,但我将测试留给你:)

答案 1 :(得分:4)

转换为swift 3.1

extension Array {

  func insert(separator: Element) -> [Element] {

    return (0 ..< 2 * count - 1).map { $0 % 2 == 0 ? self[$0/2] : separator }
  }
}

答案 2 :(得分:4)

以下是原始答案转换为Swift 3/4

timestamp