使用此处的示例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
答案 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 })