如何使用 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
HalfOpenInterval
或 ClosedInterval
不是那个,因为它只有 "start" 和 "end" 值,但没有每个值的 "stride" .像这样:
Range
也有"start"和"end",这些值本身知道它们的下一个值:
另一个类似的结构,StrideTo
和StrideThrough
用stride(from:to:by:)
或stride(from:through:by)
构造。它还具有 "start" 和 "end",在这种情况下,结构本身知道值之间的 "stride"。
我希望用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
HalfOpenInterval
或 ClosedInterval
不是那个,因为它只有 "start" 和 "end" 值,但没有每个值的 "stride" .像这样:
Range
也有"start"和"end",这些值本身知道它们的下一个值:
另一个类似的结构,StrideTo
和StrideThrough
用stride(from:to:by:)
或stride(from:through:by)
构造。它还具有 "start" 和 "end",在这种情况下,结构本身知道值之间的 "stride"。