has*_*emi 8 functional-programming swift
我有这个代码:
let items = [1, 2, 3]
let sep = 0
Run Code Online (Sandbox Code Playgroud)
我想sep在每两个元素之间插入items以获得类似于此的结果:
newItems = [1, 0, 2, 0, 3]
Run Code Online (Sandbox Code Playgroud)
有没有一种简洁的方法来通过Swift中的函数式编程来实现这一点?类似的东西String.join(),但对于数组.
Mar*_*n R 11
这样做的诀窍:
let items = [1, 2, 3]
let sep = 0
let newItems = [sep].join(items.map { [ $0 ] } )
println(newItems) // [1, 0, 2, 0, 3]
Run Code Online (Sandbox Code Playgroud)
items.map { [ $0 ] }创建一个单元素数组数组,[sep].join(...)然后插入分隔符并连接元素.
另一种可能的方案
let newItems = map(0 ..< 2*items.count - 1) { $0 % 2 == 0 ? items[$0/2] : sep }
Run Code Online (Sandbox Code Playgroud)
它将偶数索引映射到相应的元素items,并将奇数索引映射到分隔符.
我假设第二个解决方案表现更好,因为它不会创建这么多中间数组,但我将测试留给你:)
obe*_*ber 10
转换为 swift 5
extension Array {
func insert(separator: Element) -> [Element] {
(0 ..< 2 * count - 1).map { $0 % 2 == 0 ? self[$0/2] : separator }
}
}
Run Code Online (Sandbox Code Playgroud)
这是转换为 Swift 3/4 的原始答案
let items = [1, 2, 3]
let sep = 0
let newItems = Array(items.map { [$0] }.joined(separator: [sep]))
print(newItems) // [1, 0, 2, 0, 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2388 次 |
| 最近记录: |