【发布时间】:2020-10-18 22:46:00
【问题描述】:
假设我有一个简单的链表:
class Node {
var parent: Node?
}
// Create the chain: a <- b <- c
let a = Node()
let b = Node(parent: a)
let c = Node(parent: b)
现在我想将 c 转换为数组 ([c, b, a]),这样我就可以使用其他高阶函数,例如 map。
从通常调用的链表生成数组的方法是什么?
有没有办法使用其他高阶函数来实现而不使用循环?
我能想到的唯一实现回退到使用循环:
func chain<T>(_ initial: T, _ next: (T) -> T?) -> [T] {
var result = [initial]
while let n = next(result.last!) {
result.append(n)
}
return result
}
chain(c) { $0.parent } // == [c, b, a]
我想知道是否有一种内置方式来使用诸如 map/reduce/etc 之类的函数。得到相同的结果。
【问题讨论】:
标签: swift functional-programming