In C/Objective-C è possibile trovare il valore minimo e massimo tra due numeri utilizzando le macro MIN e MAX. Swift non supporta le macro e sembra che non ci siano equivalenti nella libreria lingua/base. Si dovrebbe andare con una soluzione personalizzata, magari basata su generici come questo one?Equivalente Swift per i macro MIN e MAX
risposta
min
e max
sono già definite nella Swift:
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
vedere questo grande writeup su documented & undocumented built-in functions in Swift.
Come indicato, Swift fornisce le funzioni max
e min
.
Un esempio (aggiornato per 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
Con Swift, min
e max
fanno parte della Swift Standard Library Functions Reference.
max(_:_:)
ha la seguente dichiarazione:
func max<T : Comparable>(_ x: T, _ y: T) -> T
è possibile utilizzarlo come questa con Int
:
let maxInt = max(5, 12) // returns 12
V'è una seconda funzione chiamata max(_:_:_:_:)
che ti permette di confrontare ancora di più parametri. max(_:_:_:_:)
prende un variadic parameter ed ha la seguente dichiarazione:
func max<T : Comparable>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T
è possibile utilizzarlo come questa con Float
:
let maxInt = max(12.0, 18.5, 21, 15, 26, 32.9, 19.1) // returns 32.9
Tuttavia, con Swift, non si è limitati ad usare max(_:_:)
, max(_:_:_:_:)
e le loro controparti min
con Int
, Float
o Double
. Di fatto, tali funzioni sono generiche e possono accettare qualsiasi tipo di parametro conforme al protocollo Comparable
, potrebbe essere String
, Character
o uno dei tuoi personalizzati class
o struct
. In tal modo, i seguenti codici Parco giochi funzionano perfettamente:
let maxString = max("Car", "Boat") // returns "Car" (alphabetical order)
class Route: Comparable, CustomStringConvertible {
let distance: Int
var description: String { return "Route with distance: \(distance)" }
init(distance: Int) {
self.distance = distance
}
}
func ==(lhs: Route, rhs: Route) -> Bool {
return lhs.distance == rhs.distance
}
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"
Inoltre, se si vuole ottenere l'elemento massimo di elementi che sono all'interno di un Array
, un Set
, un Dictionary
o qualsiasi altro sequenza, è possibile utilizzare i metodi maxElement() o maxElement(_:). Vedi this Stack Overflow answer per maggiori dettagli.
Prova questo.
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")
SWIFT 4 Sintassi cambiato un po ':
public func max<T>(_ x: T, _ y: T) -> T where T : Comparable
public func min<T>(_ x: T, _ y: T) -> T where T : Comparable
e
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
Così, quando lo si utilizza si dovrebbe scrivere come in questo esempio:
let min = 0
let max = 100
let value = -1000
let currentValue = Swift.min(Swift.max(min, value), max)
Quindi il valore da 0 a 100 non importa se è inferiore a 0 o superiore a 100.
Se stai riscontrando un errore del compilatore in XCode 9 come me, affermando che max() non esiste anche se lo passi due 'Int ', quindi modificalo a Swift.max e improvvisamente yay, le cose vanno meglio. Grazie, wm.p1us! – xaphod
- 1. multipla valore Min e Max per testo
- 2. Specificare max e min per Random.nextInt()?
- 3. Generale min e max - C++
- 4. NSDate Min e Max Valori possibili
- 5. Imposta i caratteri min e max in un'espressione regolare?
- 6. Determinare min e max in gnuplot
- 7. Il boxplot Matplotlib mostra solo i flip max e min
- 8. Linq (MIN && MAX)
- 9. Python: valori Max e Min utilizzabili
- 10. Numero di telefono internazionale max e min?
- 11. Valori min e max SmallDateTime in C#
- 12. Java - numero limite tra min e max
- 13. @Media min-width e max-width
- 14. Come trovare epsilon, min e max costanti per CUDA?
- 15. Implementazione Java per Min-Max Heap?
- 16. Ottenere min e max elementi per 2 serie nel panda
- 17. rolling min e rolling max per C++ boost?
- 18. MIN() e MAX() a Swift e la conversione Int a CGFloat
- 19. più recente valore max/min
- 20. Crossfilter - come trovare min/max
- 21. jQuery DatePicker Min Max date
- 22. C#: sequenza min a max
- 23. Kit sprite impostato min. e Max. per Jump
- 24. Come selezionare min e max dalla tabella per punteggio colonna?
- 25. SELEZIONE min min e max min valore da una parte di una tabella in MySQL
- 26. x86 max/min istruzioni asm?
- 27. Datepicker e timepicker - imposta valori max e min in android
- 28. Libreria min-cut veloce per Max-flow per Python
- 29. problema Swift utilizzando max() e min() in sequenza durante l'archiviazione su Xcode
- 30. Come si annullano i valori min-max di UISlider?
Siamo spiacenti. Come l'hai imparato? Non lo vedo in 'The Swift Programming Language' né in una ricerca di documentazione Xcode6. – GoZoner
@GoZoner A volte devi solo scriverlo su Xcode e controllare l'intestazione Swift. Se digiti 'let a: Int = 5' e Command + Click su' Int', puoi vedere cose interessanti! – Jack
Wow, contento di averlo chiesto! Nel migliore dei casi stavo scrivendo "a" e scorrendo le possibilità di completamento di Xcode ... ma "Command + Click" è il biglietto! – GoZoner