我希望用HalfOpenInterval方法对reduce进行扩展
所以可以很容易地使用一些快速的代码片段
例如:
var a = [3,4,9,7]
var mini = (0..<a.count).reduce(0, combine: { a[$0] > a[$1] ? $0 : $1 })我注意到HalfOpenInterval适合IntervalType协议,但不确定如何迭代reduce函数中的每个元素。
extension HalfOpenInterval {
func reduce<T>(initialize: T, combine: (u: U, t:T) -> U) -> U {
...
}
}tks
发布于 2015-03-11 07:48:30
也许,您应该扩展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: { $0 + $1}) // -> 66HalfOpenInterval或ClosedInterval不是这样的,因为它只有“开始”和“结束”值,但是没有每个值的“跨步”。就像这样:

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

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

发布于 2015-03-11 07:48:05
您可以通过以下方式扩展Range类。
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
}
}https://stackoverflow.com/questions/28979873
复制相似问题