首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用约简方法扩展HalfOpenInterval

如何用约简方法扩展HalfOpenInterval
EN

Stack Overflow用户
提问于 2015-03-11 06:20:04
回答 2查看 60关注 0票数 0

我希望用HalfOpenInterval方法对reduce进行扩展

所以可以很容易地使用一些快速的代码片段

例如:

代码语言:javascript
复制
var a = [3,4,9,7]
var mini = (0..<a.count).reduce(0, combine: { a[$0] > a[$1] ? $0 : $1 })

我注意到HalfOpenInterval适合IntervalType协议,但不确定如何迭代reduce函数中的每个元素。

代码语言:javascript
复制
extension HalfOpenInterval {
    func reduce<T>(initialize: T, combine: (u: U, t:T) -> U) -> U {
        ...
    }
}

tks

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-11 07:48:30

也许,您应该扩展Range

代码语言:javascript
复制
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: { $0 + $1}) // -> 66

HalfOpenIntervalClosedInterval不是这样的,因为它只有“开始”和“结束”值,但是没有每个值的“跨步”。就像这样:

Range还有“开始”和“结束”,这些值本身知道它们的下一个值:

另一个类似的结构,StrideToStrideThrough,用stride(from:to:by:)stride(from:through:by)构建。它也有“开始”和“结束”,在这种情况下,结构本身知道价值之间的“大步”。

票数 1
EN

Stack Overflow用户

发布于 2015-03-11 07:48:05

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

代码语言:javascript
复制
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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28979873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档