ใน C / Objective-C คุณสามารถค้นหาค่าต่ำสุดและสูงสุดระหว่างสองตัวเลขโดยใช้มาโคร MIN และ MAX Swift ไม่รองรับมาโครและดูเหมือนว่าจะไม่มีสิ่งที่เทียบเท่าในไลบรารีภาษา / ฐาน หนึ่งควรไปกับโซลูชันที่กำหนดเองอาจจะขึ้นอยู่กับข้อมูลทั่วไปเช่นนี้หนึ่ง ?
ใน C / Objective-C คุณสามารถค้นหาค่าต่ำสุดและสูงสุดระหว่างสองตัวเลขโดยใช้มาโคร MIN และ MAX Swift ไม่รองรับมาโครและดูเหมือนว่าจะไม่มีสิ่งที่เทียบเท่าในไลบรารีภาษา / ฐาน หนึ่งควรไปกับโซลูชันที่กำหนดเองอาจจะขึ้นอยู่กับข้อมูลทั่วไปเช่นนี้หนึ่ง ?
คำตอบ:
let a : Int = 5
และ Command + คลิกInt
คุณจะได้เห็นสิ่งดีๆ!
a.
และเลื่อนดูความเป็นไปได้ในการเติม Xcode ... แต่ 'Command + Click' คือตั๋ว!
ตามที่ระบุไว้ 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
ที่Set
เป็นDictionary
หรือลำดับอื่น ๆ ของComparable
องค์ประกอบคุณสามารถใช้max ()หรือนาที ()วิธีการ (ดูคำตอบนี้กองมากเกินมาก รายละเอียด).
SWIFT 4 Syntax เปลี่ยนไปเล็กน้อย:
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
Int
วินาทีอย่างชัดเจนแล้วให้เปลี่ยนเป็น Swift.max และทันใดนั้นสิ่งต่างๆก็ดีขึ้น ขอบคุณ wm.p1us!
ลองทำตามนี้
let numbers = [2, 3, 10, 9, 14, 6]
print("Max = \(numbers.maxElement()) Min = \(numbers.minElement())")