Mit Swift 5, Arraywie auch andere SequenceProtokolle entsprechen Objekte ( Dictionary, Setusw.), hat zwei Methoden aufgerufen max()und max(by:)dass die Rückkehr des maximale Element in der Sequenz oder , nilwenn die Sequenz leer ist .
# 1. Mit Arrayder max()Methode von
Wenn der Elementtyp in Ihrer Sequenz Konform ComparableProtokoll (kann es sein String, Float, Characteroder einer Ihrer benutzerdefinierten Klasse oder Struktur), werden Sie in der Lage zu nutzen , max()dass Folgendes Erklärung :
@warn_unqualified_access func max() -> Element?
Gibt das maximale Element in der Sequenz zurück.
Die folgenden Spielplatzcodes werden angezeigt 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. Mit Arrayder max(by:)Methode von
Wenn der Elementtyp in Ihrer Sequenz nicht dem ComparableProtokoll entspricht, müssen Sie max(by:)Folgendes mit der folgenden Deklaration verwenden :
@warn_unqualified_access func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?
Gibt das maximale Element in der Sequenz zurück, wobei das angegebene Prädikat als Vergleich zwischen Elementen verwendet wird.
Die folgenden Spielplatzcodes werden angezeigt 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)