假设我有一个带Usr
对象的数组.和Usr
对象有属性age
.除了Usr
逐个读取对象,并逐个比较age
值之外,是否有任何快捷方式可以执行此操作?谢谢.
Kir*_*ins 24
您可以简单地将用户数组映射到用户年龄和查找最大年龄的数组:
class Usr {
var age: Int
init(_ age: Int) {
self.age = age
}
}
let users = [Usr(1), Usr(8), Usr(5)]
let maxAge = maxElement(users.map{$0.age}) // 8
Run Code Online (Sandbox Code Playgroud)
War*_*shi 14
struct User {
var age: Int
}
let users = [ User(age: 10), User(age: 20), User(age: 30)]
let oldestUser = users.max { $0.age < $1.age }
oldestUser?.age // 30
Run Code Online (Sandbox Code Playgroud)
Mar*_*cas 10
斯威夫特3:
let users = [Usr(15), Usr(25), Usr(20)]
let max = users.map { $0.age }.max()
Run Code Online (Sandbox Code Playgroud)
// max = 25
使用max(by:)函数
class Usr {
var age: Int
init(_ age: Int) {
self.age = age
}
}
let users = [Usr(3), Usr(8), Usr(6)]
if let userWithMaxAge : Usr = users.max(by: {$0.age < $1.age}){
print(userWithMaxAge.age)
}
Run Code Online (Sandbox Code Playgroud)
它将打印 8
前面的答案有点复杂,并没有准确描述我将通过尊重的方法实现什么。因此,根据您的需求,有两种不同的方法。
如果这是您的型号:
struct Purchase {
let id: String
let amount: Double
}
Run Code Online (Sandbox Code Playgroud)
这些是你的对象:
let iPhonePurchase = Purchase(id: "iPhone", amount: 999.00)
let iPadPurchase = Purchase(id: "iPad", amount: 1299.00)
let purchases = [iPhonePurchase, iPadPurchase]
Run Code Online (Sandbox Code Playgroud)
如果您希望对象本身包含最高值,请使用:
let highestPurchase = purchases.max { $0.amount < $1.amount }
Run Code Online (Sandbox Code Playgroud)
这将返回 的对象iPadPurchase
。
另一方面,如果您不想获取整个对象,则只想获取最高金额值:
let highestPurchase = purchases.map { $0.amount }.max()
Run Code Online (Sandbox Code Playgroud)
在这里你得到的1299.00
是最高值。
另一种方式:
class Usr {
var age: Int
init(_ age: Int) {
self.age = age
}
}
let users = [Usr(1), Usr(8), Usr(5)]
let largestAge = users.map{ $0.age }.reduce(0) { $0 > $1 ? $0 : $1 } // 8
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16395 次 |
最近记录: |