当前位置:  开发笔记 > IOS > 正文

从数组中获取具有max属性的元素

如何解决《从数组中获取具有max属性的元素》经验,为你挑选了1个好方法。

如果我有结构...

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.



1> Martin R..:

与此同时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 }

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有