【发布时间】:2015-12-18 19:32:32
【问题描述】:
作为练习,我尝试将 map、length 和 filter 编写为 reduce 函数。
func map<T>(array: [T], f: (T->T)) -> [T] {
return array.reduce([]) {
(var seed, value) in
seed.append(f(value))
return seed
}
}
func length<T>(array: [T]) -> Int {
return array.reduce(0){ (x,_) in x + 1 }
}
func filter<T>(array: [T], predicate: (T->Bool)) -> [T]{
return array.reduce([]){
(var seed, value) in
if predicate(value){
seed.append(value)
}
return seed
}
}
这是我可以用来将这些函数重写为 reduce 的最优雅的语法吗? 第二个问题:map 接受一个函数 f:(T->T) 基本上类型说我只能返回 T 类型的东西,但是如果我编写的函数将 T 类型转换为 Bool 或 Int... 我该如何做到这一点? 好像地图不存在
【问题讨论】: