我有这段代码:
let items = [1, 2, 3]
let sep = 0
我想在sep
的每两个元素之间插入items
,以获得与此类似的结果:
newItems = [1, 0, 2, 0, 3]
有没有一种简洁的方法通过Swift中的函数式编程来实现这一点?类似于String.join()
的东西,但对于数组。
答案 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