如何在数组中返回max元素?

时间:2016-12-26 23:14:44

标签: arrays swift

使用此处的示例How to find the max value in a Swift object array?,如何返回Usr元素而不是Int age值?

class Usr {
    var age: Int

    init(_ age: Int) {
        self.age = age
    }
}

let users = [Usr(1), Usr(8), Usr(5)]

let maxAge = users.map{$0.age}.max() //this returns 8 instead of the instance

2 个答案:

答案 0 :(得分:3)

在Swift中有很多很棒的方法可以做到这一点。一种快速简便的方法是使用reduce函数:

let users = [Usr(1), Usr(8), Usr(5)]

let max: Usr = users.reduce(Usr(Int.min)) {
    ($0.age > $1.age) ? $0 : $1
}

print(max.age) // 8

您还可以使Usr符合Comparable协议并使用max()功能:

extension Usr: Comparable {}

func ==(lhs: Usr, rhs: Usr) -> Bool {
    return lhs.age < rhs.age
}

func <(lhs: Usr, rhs: Usr) -> Bool {
    return lhs.age < rhs.age
}

let maxUser = users.max()

当然你也可以使用更传统的循环:

var maxUser = users[0]
for user in users {
    if user.age > maxUser.age {
        maxUser = user
    }
}

答案 1 :(得分:2)

可能有更短的选项,但这是一种方式:

let maxAgeUser = users.reduce(users.first, { $0!.age > $1.age ? $0 : $1 })