Với Swift 5, Array
giống như các Sequence
đối tượng tuân thủ Giao thức khác ( Dictionary
, Set
v.v.), có hai phương thức được gọi max()
và max(by:)
trả về phần tử tối đa trong chuỗi hoặc nil
nếu chuỗi trống.
# 1. Sử dụng Array
's max()
phương pháp
Nếu các loại nguyên tố bên trong chiếu theo trình tự của bạn để Comparable
giao thức (nó có thể String
, Float
, Character
hoặc một trong các lớp tùy chỉnh của bạn hoặc struct), bạn sẽ có thể sử dụng max()
mà có sau tuyên bố :
@warn_unqualified_access func max() -> Element?
Trả về phần tử lớn nhất trong dãy.
Các mã Sân chơi sau sẽ hiển thị để sử dụng max()
:
let intMax = [12, 15, 6].max()
let stringMax = ["bike", "car", "boat"].max()
print(String(describing: intMax)) // prints: Optional(15)
print(String(describing: stringMax)) // prints: Optional("car")
class Route: Comparable, CustomStringConvertible {
let distance: Int
var description: String { return "Route with distance: \(distance)" }
init(distance: Int) {
self.distance = distance
}
static func ==(lhs: Route, rhs: Route) -> Bool {
return lhs.distance == rhs.distance
}
static func <(lhs: Route, rhs: Route) -> Bool {
return lhs.distance < rhs.distance
}
}
let routes = [
Route(distance: 20),
Route(distance: 30),
Route(distance: 10)
]
let maxRoute = routes.max()
print(String(describing: maxRoute)) // prints: Optional(Route with distance: 30)
# 2. Sử dụng Array
's max(by:)
phương pháp
Nếu loại phần tử bên trong chuỗi của bạn không tuân theo Comparable
giao thức, bạn sẽ phải sử dụng giao thức max(by:)
có khai báo sau :
@warn_unqualified_access func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?
Trả về phần tử lớn nhất trong dãy, sử dụng vị từ đã cho làm phép so sánh giữa các phần tử.
Các mã Sân chơi sau sẽ hiển thị để sử dụng max(by:)
:
let dictionary = ["Boat" : 15, "Car" : 20, "Bike" : 40]
let keyMaxElement = dictionary.max(by: { (a, b) -> Bool in
return a.key < b.key
})
let valueMaxElement = dictionary.max(by: { (a, b) -> Bool in
return a.value < b.value
})
print(String(describing: keyMaxElement)) // prints: Optional(("Car", 20))
print(String(describing: valueMaxElement)) // prints: Optional(("Bike", 40))
class Route: CustomStringConvertible {
let distance: Int
var description: String { return "Route with distance: \(distance)" }
init(distance: Int) {
self.distance = distance
}
}
let routes = [
Route(distance: 20),
Route(distance: 30),
Route(distance: 10)
]
let maxRoute = routes.max(by: { (a, b) -> Bool in
return a.distance < b.distance
})
print(String(describing: maxRoute)) // prints: Optional(Route with distance: 30)