[generics] MIN 및 MAX 매크로에 해당하는 Swift
C / Objective-C에서는 MIN 및 MAX 매크로를 사용하여 두 숫자 사이의 최소값과 최대 값을 찾을 수 있습니다. Swift는 매크로를 지원하지 않으며 언어 / 기본 라이브러리에 동등한 항목이없는 것 같습니다. 하나는 어쩌면이 같은 제네릭을 기반으로, 사용자 지정 솔루션으로 이동해야 하나 ?
답변
min
그리고 max
이미 스위프트에 정의되어 있습니다 :
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
Swift의 문서화 및 문서화되지 않은 내장 함수에 대한이 훌륭한 글을 참조하십시오 .
답변
지적했듯이 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
답변
스위프트 5로 max(_:_:)
와 min(_:_:)
의 일부인 글로벌 숫자 기능 . max(_:_:)
다음과 같은 선언이 있습니다.
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
Int
s 와 함께 다음과 같이 사용할 수 있습니다 .
let maxInt = max(5, 12) // returns 12
또한 다른 함수가 호출 max(_:_:_:_:)
되어 min(_:_:_:_:)
더 많은 매개 변수를 비교할 수 있습니다. max(_:_:_:_:)
다음과 같은 선언이 있습니다.
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
Float
s 와 함께 다음과 같이 사용할 수 있습니다 .
let maxInt = max(12.0, 18.5, 21, 26, 32.9, 19.1) // returns 32.9
그러나 Swift를 사용 max(_:_:)
하면 숫자가있는 형제와 사용에 국한되지 않습니다 . 사실, 이러한 기능은 일반적인하고 따르는 지 어떤 매개 변수 유형 받아 들일 수 Comparable
프로토콜, 그것은있을 수 있습니다를 String
, Character
또는 사용자 정의 중 하나 class
또는 struct
.
따라서 다음 Playground 샘플 코드가 완벽하게 작동합니다.
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"
또한, Array
a Set
, a Dictionary
또는 기타 Comparable
요소 시퀀스 내부에있는 요소의 최소 / 최대 요소를 얻으려면 max () 또는 min () 메서드를 사용할 수 있습니다 (자세한 내용은 이 스택 오버플로 답변 참조). 세부).
답변
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 이상인지는 중요하지 않습니다.
답변
이 시도.
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")