Dengan Swift 5, Arrayseperti objek SequenceProtokol lain yang sesuai ( Dictionary,, Setdll), memiliki dua metode yang dipanggil max()dan max(by:)yang mengembalikan elemen maksimum dalam urutan atau niljika urutannya kosong.
# 1. Menggunakan Array'smax() metode
Jika jenis elemen dalam urutan sesuai untuk Comparableprotokol (mungkin itu String, Float, Characteratau salah satu dari kelas kustom atau struct), Anda akan dapat menggunakan max()yang memiliki berikut deklarasi :
@warn_unqualified_access func max() -> Element?
Mengembalikan elemen maksimum dalam urutan.
Kode Playground berikut ditampilkan untuk digunakan 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. Menggunakan Array'smax(by:) metode
Jika jenis elemen di dalam urutan Anda tidak sesuai dengan Comparableprotokol, Anda harus menggunakan max(by:)yang memiliki deklarasi berikut :
@warn_unqualified_access func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?
Mengembalikan elemen maksimum dalam urutan, menggunakan predikat yang diberikan sebagai perbandingan antar elemen.
Kode Playground berikut ditampilkan untuk digunakan 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)