Trong C/Objective-C, bạn có thể tìm giá trị tối thiểu và tối đa giữa hai số sử dụng các macro MIN và MAX. Swift không hỗ trợ các macro và có vẻ như không có sự tương đương trong thư viện ngôn ngữ/cơ sở. Nên đi với một giải pháp tùy chỉnh, có thể dựa trên generics như thế này one?Tương đương Swift cho các macro MIN và MAX
Trả lời
min
và max
đã quy định tại Swift:
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
Xem writeup tuyệt vời này trên documented & undocumented built-in functions in Swift.
Như đã chỉ ra, Swift cung cấp các chức năng max
và min
.
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, min
và max
là một phần của Swift Standard Library Functions Reference.
max(_:_:)
có khai báo như sau:
func max<T : Comparable>(_ x: T, _ y: T) -> T
Bạn có thể sử dụng nó như thế này với Int
:
let maxInt = max(5, 12) // returns 12
Có một chức năng thứ hai gọi là max(_:_:_:_:)
cho phép bạn so sánh nhiều hơn thông số. max(_:_:_:_:)
mất một variadic parameter và có khai báo như sau:
func max<T : Comparable>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T
Bạn có thể sử dụng nó như thế này với Float
:
let maxInt = max(12.0, 18.5, 21, 15, 26, 32.9, 19.1) // returns 32.9
Tuy nhiên, với Swift, bạn sẽ không bị hạn chế sử dụng max(_:_:)
, max(_:_:_:_:)
và các đối tác min
của chúng tôi với Int
, Float
hoặc Double
. Trên thực tế, các chức năng đó là chung và có thể chấp nhận bất kỳ loại thông số nào tuân theo giao thức Comparable
, có thể là String
, Character
hoặc một trong các tùy chỉnh class
hoặc struct
của bạn. Qua đó, các mã Sân chơi sau hoạt động hoàn hảo:
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"
Hơn nữa, nếu bạn muốn để có được những yếu tố tối đa các yếu tố đó là bên trong một Array
, một Set
, một Dictionary
hoặc bất kỳ khác trình tự, bạn có thể sử dụng các phương thức maxElement() hoặc maxElement(_:). Xem this Stack Overflow answer để biết thêm chi tiết.
Hãy thử điều này.
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")
SWIFT 4 Cú pháp 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 hoặc cao hơn 100.
Nếu bạn gặp lỗi trình biên dịch thú vị trong XCode 9 như tôi, hãy nói rằng max() không tồn tại ngay cả khi bạn truyền rõ ràng hai 'Int', sau đó thay đổi nó để Swift.max và đột nhiên yay, mọi thứ tốt hơn. Cảm ơn wm.p1us! – xaphod
- 1. iOS Swift max(), min()
- 2. Python max và min
- 3. Tương đương Swift cho dispatch_group_create
- 4. Xác định min và max trong gnuplot
- 5. Làm thế nào để tìm các hằng số epsilon, min và max cho CUDA?
- 6. Nhiều Min và Max giá trị cho textbox
- 7. LINQ (MIN && MAX)
- 8. Tương đương Varchar (Max) cho DB2 là gì?
- 9. Tương đương với .Max() trong jquery
- 10. Sử dụng các hàm min và max trong C++
- 11. Chúng ta có thể xác định min-margin và max-margin, max-padding và min-padding trong css không?
- 12. Tương đương Swift của Array.componentsJoinedByString?
- 13. Tương đương android.content.BroadcastReceiver trong Swift
- 14. Tương đương Swift của @encode
- 15. tương đương Swift của removeObjectsInRange:
- 16. Tương đương với Math.Min & Math.Max cho các ngày?
- 17. NumPy min/max tại chỗ gán
- 18. Math Looping giữa Min và Max Sử dụng Mod?
- 19. Nhận số min-max từ mảng multidimentional
- 20. cách lấy giá trị min và max từ jQueryUI Slider
- 21. html5 loại số 'min' và 'max' thực hiện trong symfony2
- 22. Issue với CSS min-width và max-width
- 23. Min/Max trên một mảng các đối tượng
- 24. Trợ lý tương đương Doctrine 2 SUM() tương đương?
- 25. Min có điều kiện và Max trong Excel 2010
- 26. dispatch_barrier_async tương đương trong Swift 3
- 27. Lớp chuẩn hóa Min-Max trong Caffein
- 28. trục y3 min/max không hoạt động
- 29. chênh lệch giữa @size (max = giá trị) và @min (giá trị) @max (giá trị)
- 30. Tạo đối tượng Getter và Setter tương đương trong Swift
Xin lỗi. Làm sao bạn học được điều này? Tôi không thấy nó trong 'Ngôn ngữ lập trình Swift' cũng như trong tìm kiếm tài liệu Xcode6. – GoZoner
@GoZoner Đôi khi bạn chỉ cần gõ nó lên trong Xcode và kiểm tra tiêu đề Swift. Nếu bạn gõ 'let a: Int = 5' và Command + Click vào' Int', bạn sẽ thấy những thứ tuyệt vời! – Jack
Wow, vui vì tôi đã hỏi! Tốt nhất là tôi đã gõ 'a.' và cuộn qua các khả năng hoàn thành Xcode ... nhưng 'Command + Click' là vé! – GoZoner