如何使用 reduce 方法扩展 HalfOpenInterval

How to extension HalfOpenInterval with reduce method

我希望用reduce方法扩展HalfOpenInterval
所以可以轻松使用一些快速代码片段
例如:

var a = [3,4,9,7]
var mini = (0..<a.count).reduce(0, combine: { a[[=10=]] > a[] ? [=10=] :  })

我注意到 HalfOpenInterval 适合 IntervalType 协议,但不确定如何迭代 reduce 函数

中的每个元素
extension HalfOpenInterval {
    func reduce<T>(initialize: T, combine: (u: U, t:T) -> U) -> U {
        ...
    }
}

谢谢

您可以通过以下方式扩展 Range class。

extension Range {

    func reduce<U>(initialize: U, combine: (u: U, t:T) -> U) -> U {

        var result = initialize

        for value in self {
            result = combine(u: result,t: value)
        }
        return result
    }
}

也许,你应该扩展的是Range:

extension Range {
    func reduce<U>(initial:U, combine:(U, T) -> U) -> U {
        return Swift.reduce(self, initial, combine)
    }
}

let sum = (0 ..< 12).reduce(0, combine: { [=10=] + }) // -> 66

HalfOpenIntervalClosedInterval 不是那个,因为它只有 "start" 和 "end" 值,但没有每个值的 "stride" .像这样:

Range也有"start"和"end",这些值本身知道它们的下一个值:

另一个类似的结构,StrideToStrideThroughstride(from:to:by:)stride(from:through:by)构造。它还具有 "start" 和 "end",在这种情况下,结构本身知道值之间的 "stride"。