En C/Objective-C, il est possible de trouver la valeur minimale et maximale entre deux nombres à l'aide de macros MIN et MAX. Swift ne supporte pas les macros et il semble qu'il n'y ait pas d'équivalent dans la bibliothèque language/base. Si vous utilisez une solution personnalisée, peut-être basée sur des génériques comme ceci n ?
min
et max
sont déjà définis dans Swift:
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
Voir ce grand article sur fonctions intégrées documentées et non documentées dans Swift .
Comme indiqué, Swift fournit les fonctions max
et min
.
Un exemple (mis à jour pour Swift 2.x).
let numbers = [ 1, 42, 5, 21 ]
var maxNumber = Int()
for number in numbers {
maxNumber = max(maxNumber, number as Int)
}
print("the max number is \(maxNumber)") // will be 42
Avec Swift 5, max(_:_:)
et min(_:_:)
font partie de Fonctions numériques globales . max(_:_:)
a la déclaration suivante:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Vous pouvez l'utiliser comme ceci avec Int
s:
let maxInt = max(5, 12) // returns 12
Notez également qu'il existe d'autres fonctions appelées max(_:_:_:_:)
et min(_:_:_:_:)
qui vous permet de comparer encore plus de paramètres. max(_:_:_:_:)
a la déclaration suivante:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Vous pouvez l'utiliser comme ceci avec Float
s:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Avec Swift, toutefois, vous n'êtes pas limité à utiliser max(_:_:)
et ses frères avec des nombres. En fait, ces fonctions sont génériques et peuvent accepter tout type de paramètre conforme à Comparable
protocole, que ce soit String
, Character
ou l’un de vos personnalités class
ou struct
.
Ainsi, l'exemple de code Playground suivant fonctionne parfaitement:
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 route1 = Route(distance: 4)
let route2 = Route(distance: 8)
let maxRoute = max(route1, route2)
print(maxRoute) // prints "Route with distance: 8"
De plus, si vous voulez obtenir l’élément min/max d’éléments contenus dans un Array
, un Set
, un Dictionary
ou toute autre séquence de Comparable
éléments, vous pouvez utiliser les méthodes max () ou min () (voir cette réponse de débordement de pile pour plus de détails).
Swift 4 La syntaxe a un peu changé:
public func max<T>(_ x: T, _ y: T) -> T where T : Comparable
public func min<T>(_ x: T, _ y: T) -> T where T : Comparable
et
public func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
public func min<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Donc, quand vous l'utilisez, vous devriez écrire comme dans cet exemple:
let min = 0
let max = 100
let value = -1000
let currentValue = Swift.min(Swift.max(min, value), max)
Donc, vous obtenez la valeur de 0 à 100, peu importe si elle est inférieure à 0 ou supérieure à 100.
Essaye ça.
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")