Swift中的链接方法

Swift中的链接方法,swift,functional-programming,higher-order-functions,map-function,Swift,Functional Programming,Higher Order Functions,Map Function,我想写一个可以链接到映射{}函数的函数。例如: let arr = [1,2,3,4,5] let list = arr.map { $0 * 2 }.applyRuleToSubtractVal(1) // return [1,3,5,7,9] 如何在上面定义applyRuleToSubtractVal()?(我想做更复杂的事情,但不想在地图内部做。)您需要扩展阵列的功能。点运算符调用类或结构的方法。将您自己的功能扩展到数组结构。您需要扩展数组的功能。点运算符调用类或结构的方法。将您自己的功

我想写一个可以链接到映射{}函数的函数。例如:

let arr = [1,2,3,4,5]
let list = arr.map { $0 * 2 }.applyRuleToSubtractVal(1) // return [1,3,5,7,9]

如何在上面定义
applyRuleToSubtractVal()
?(我想做更复杂的事情,但不想在地图内部做。)

您需要扩展阵列的功能。点运算符调用类或结构的方法。将您自己的功能扩展到数组结构。

您需要扩展数组的功能。点运算符调用类或结构的方法。将您自己的功能扩展到数组结构。

您的映射返回一个
Int
数组,因此您可以使用点语法对
数组执行任何数组方法。为了包含您自己的方法,请确保以某种方式扩展
Array
,例如:

extension Array where Element:IntegerType {
    func applyRuleToSubtractValue(num:Int) -> Array {
        return self.map{$0 - 1}
    }
}

let arr = [1,2,3,4,5]
let list = arr.map{$0 * 2}.applyRuleToSubtractValue(1) // [1, 3, 5, 7, 9]

如果我们没有在这里使用协议限制,那么我们将无法执行-1操作,因为它可能是任何类型的数组。

您的映射返回一个
Int
数组,因此您可以使用点语法对
数组执行任何数组方法。为了包含您自己的方法,请确保以某种方式扩展
Array
,例如:

extension Array where Element:IntegerType {
    func applyRuleToSubtractValue(num:Int) -> Array {
        return self.map{$0 - 1}
    }
}

let arr = [1,2,3,4,5]
let list = arr.map{$0 * 2}.applyRuleToSubtractValue(1) // [1, 3, 5, 7, 9]

如果我们在这里没有使用协议限制,那么我们将无法执行负1操作,因为它可能是任何类型的数组。

sketchyTech的答案是正确的,但实际上它只是隐藏了一个事实,即

let list = arr.map { $0 * 2 }.map { $0 - 1 }
执行-这不是最优的,因为数组被枚举了两次

通过使用一个枚举,可以实现相同的效果

let complexClosure = { (i: Int) in
    return i-1
}
let list = arr.map { complexClosure($0 * 2) }

sketchyTech的回答是正确的,但实际上它只是隐藏了一个事实,即

let list = arr.map { $0 * 2 }.map { $0 - 1 }
执行-这不是最优的,因为数组被枚举了两次

通过使用一个枚举,可以实现相同的效果

let complexClosure = { (i: Int) in
    return i-1
}
let list = arr.map { complexClosure($0 * 2) }

你不需要在“
map
”里面做事情,你可以链接
map
,比如
arr.map{$0*2}.map{dou something\u complex($0)}.map{$0+1}
,你不需要在“
map
里面做事情,你可以链接
map
,比如
arr.map{$0*2}.map{dou something\u complex($0)}.map{
。我认为@sketchyTech的答案应该是正确的,因为OP正在寻找链接能力。你是。但是,有关优化的信息是正确的+我认为@sketchyTech的答案应该是正确的,因为OP正在寻找可链接性。你是。但是,有关优化的信息是正确的+一对二。