如果我有一个结构...
struct MyStruct {
let number: Int
}
我有很多...
var array = [MyStruct]()
// populate array with MyStructs
然后,我可以这样做以获得最大number
...
var maxNumber = 0
for tempStruct in array where tempStruct.number > maxNumber {
maxNumber = tempStruct.number
}
但是,我不能使用...
let maxStruct = array.maxElement()
因为MyStruct
不可比。我可以使它具有可比性,但是然后我可能还想通过比较它来获得一个日期戳,因此使它可比性不是理想的选择。
我还有另一种方式可以做到这一点吗?
....
我只是想,我也可以这样做...
let maxStruct = array.sort{$0.number > $1.number}.first()
但这将花费更多时间。我不确定它使用哪种排序方法,但是可能会出现,n log(n)
而我的初始方法将是n
。
与一样sort()/sortInPlace()
,也有以下两种变体min/maxElement()
:第一种要求序列元素具有可比性:
extension SequenceType where Generator.Element : Comparable {
public func minElement() -> Self.Generator.Element?
public func maxElement() -> Self.Generator.Element?
}
第二个没有这种限制,而是将比较器作为参数:
extension SequenceType {
public func minElement(@noescape isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) throws -> Bool) rethrows -> Self.Generator.Element?
public func maxElement(@noescape isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) throws -> Bool) rethrows -> Self.Generator.Element?
}
您可以使用maxElement()
比较器功能:
// Swift 2:
let maxStruct = array.maxElement { $0.number < $1.number }
// Swift 3:
let maxStruct = array.max { $0.number < $1.number }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句