在C / Objective-C中,可以使用MIN和MAX宏找到两个数字之间的最小值和最大值。 Swift不支持宏,似乎语言/基础库中没有等价物。应该使用自定义解决方案,可能基于这样的泛型one?
答案 0 :(得分:118)
min
和max
已在Swift中定义:
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
在documented & undocumented built-in functions in Swift上查看这篇精彩的文章。
答案 1 :(得分:34)
正如所指出的,Swift提供max
和min
函数。
一个例子(为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
答案 2 :(得分:17)
使用Swift,min
和max
是Swift Standard Library Functions Reference的一部分。
max(_:_:)
有以下声明:
func max<T : Comparable>(_ x: T, _ y: T) -> T
你可以像Int
一样使用它:
let maxInt = max(5, 12) // returns 12
还有一个名为max(_:_:_:_:)
的第二个函数,可让您比较更多参数。 max(_:_:_:_:)
需要variadic parameter并具有以下声明:
func max<T : Comparable>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T
你可以像Float
一样使用它:
let maxInt = max(12.0, 18.5, 21, 15, 26, 32.9, 19.1) // returns 32.9
但是,使用Swift,您不仅限于使用max(_:_:)
,max(_:_:_:_:)
及其min
对等人Int
,Float
或{ {1}}。实际上,这些函数是通用的,可以接受符合Double
协议的任何参数类型,可能是Comparable
,String
或您的一个自定义Character
或{{ 1}}。因此,以下Playground代码可以完美地运行:
class
struct
此外,如果您想获取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"
,Array
或任何其他序列中元素的最大元素,您可以使用{{3 }或maxElement()方法。有关详细信息,请参阅maxElement(_:)。
答案 3 :(得分:13)
SWIFT 4 语法改变了一点:
public func max<T>(_ x: T, _ y: T) -> T where T : Comparable
public func min<T>(_ x: T, _ y: T) -> T where T : Comparable
和
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
所以当你使用它时,你应该像这个例子一样写:
let min = 0
let max = 100
let value = -1000
let currentValue = Swift.min(Swift.max(min, value), max)
因此,如果低于0或高于100,则从0到100得到的值无关紧要。
答案 4 :(得分:0)
试试这个。
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")