MIN 및 MAX 매크로에 대응하는 스위프트
C / Objective-C에서는 MIN과 MAX 매크로를 사용하여 두 숫자 사이의 최소값과 최대값을 찾을 수 있습니다.스위프트는 매크로를 지원하지 않으며 언어/베이스 라이브러리에 동등한 기능이 없는 것 같습니다.맞춤형 솔루션을 사용해야 하나요, 어쩌면 이런 제네릭을 기반으로 해야 하나요?
min그리고.maxSwift에 정의되어 있습니다.
func max<T : Comparable>(x: T, y: T, rest: T...) -> T
func min<T : Comparable>(x: T, y: T, rest: T...) -> T
다음과 같이 사용됩니다.
let min = min(1, 2)
let max = max(1, 2)
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
Swift 5와 함께, 는 전역 숫자 함수의 일부입니다.max(_:_:)에는 다음과 같은 선언이 있습니다.
func max<T>(_ x: T, _ y: T) -> T where T : Comparable
이렇게 사용하시면 됩니다.Ints:
let maxInt = max(5, 12) // returns 12
이 함수에는 더 많은 파라미터를 비교할 수 있는 다른 함수가 있습니다.max(_:_:_:_:)에는 다음과 같은 선언이 있습니다.
func max<T>(_ x: T, _ y: T, _ z: T, _ rest: T...) -> T where T : Comparable
이렇게 사용하시면 됩니다.Floats:
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,aSet,aDictionary혹은 다른 어떤 순서의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]
let min = numbers.min()
let max = numbers.max()
print("Max = \(max) Min = \(min)")
언급URL : https://stackoverflow.com/questions/24186648/swift-equivalent-for-min-and-max-macros
'programing' 카테고리의 다른 글
| 명령줄 응용 프로그램을 통해 Firefox에서 열려 있는 탭 목록을 얻으려면 어떻게 해야 합니까? (0) | 2023.09.26 |
|---|---|
| Driver Manager가 h2 데이터베이스에 연결할 때 mariadb 드라이버를 사용하려고 합니다. (0) | 2023.09.26 |
| sql join 같은 테이블에 행 2개를 연결합니다. (0) | 2023.09.26 |
| Lodash 타이틀 케이스 (모든 단어의 대문자 첫 글자) (0) | 2023.09.26 |
| MySQL 8에서 열 통계를 영구적으로 비활성화하는 방법? (0) | 2023.09.26 |