Câu trả lời:
min
và max
đã được định nghĩa trong Swift:
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
Xem bài viết tuyệt vời này về các hàm tích hợp có tài liệu và không có tài liệu trong Swift .
let a : Int = 5
và nhấn Command + Click vào Int
, bạn sẽ thấy những thứ hay ho!
a.
và cuộn qua các khả năng hoàn thành Xcode ... nhưng 'Command + Click' mới là vé!
Như đã chỉ ra, Swift cung cấp max
và các min
chức năng.
Một ví dụ (được cập nhật cho 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
Với Swift 5 max(_:_:)
và min(_:_:)
là một phần của Hàm số toàn cầu . max(_:_:)
có khai báo sau:
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Bạn có thể sử dụng nó như thế này với Int
s:
let maxInt = max(5, 12) // returns 12
Cũng lưu ý rằng có những hàm khác được gọi max(_:_:_:_:)
và min(_:_:_:_:)
cho phép bạn so sánh nhiều tham số hơn nữa. max(_:_:_:_:)
có khai báo sau:
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Bạn có thể sử dụng nó như thế này với Float
s:
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
Tuy nhiên, với Swift, bạn không bị giới hạn sử dụng max(_:_:)
và các anh chị em của nó có số. Trên thực tế, những chức năng đó là chung chung và có thể chấp nhận bất kỳ loại tham số nào tuân theo Comparable
giao thức, có thể là String
, Character
hoặc một trong những tùy chỉnh của bạn class
hoặc struct
.
Do đó, mã mẫu Playground sau hoạt động hoàn hảo:
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"
Hơn nữa, nếu bạn muốn nhận phần tử tối thiểu / tối đa của các phần tử bên trong một Array
, a Set
, a Dictionary
hoặc bất kỳ chuỗi Comparable
phần tử nào khác , bạn có thể sử dụng phương thức max () hoặc min () (xem câu trả lời Tràn ngăn xếp này để biết thêm chi tiết).
Cú pháp SWIFT 4 đã thay đổi một chút:
public func max<T>(_ x: T, _ y: T) -> T where T : Comparable
public func min<T>(_ x: T, _ y: T) -> T where T : Comparable
và
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
Vì vậy, khi bạn sử dụng nó, bạn nên viết như trong ví dụ này:
let min = 0
let max = 100
let value = -1000
let currentValue = Swift.min(Swift.max(min, value), max)
Vì vậy, bạn nhận được giá trị từ 0 đến 100 không quan trọng nếu nó dưới 0 hay cao hơn 100.
Int
giây, thì hãy thay đổi nó thành Swift.max và đột nhiên, mọi thứ tốt hơn. Cảm ơn wm.p1us!
Thử cái này.
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")