스위프트 (5), Array
기타와 같은 Sequence
프로토콜 따르는 물체 ( Dictionary
, Set
등)이라는 두 가지 방법이 있습니다 max()
및 max(by:)
순서를 돌려 최대 요소 또는 nil
시퀀스는 비어있는 경우.
#1. 사용 Array
의 max()
방법을
시퀀스 내부의 요소 유형이 Comparable
프로토콜을 준수 하는 경우 (String
, Float
, Character
또는 사용자 정의 클래스 또는 구조체 중 하나), 당신은 사용할 수있을 것이다 max()
그 다음이 선언 :
@warn_unqualified_access func max() -> Element?
시퀀스의 최대 요소를 반환합니다.
다음 플레이 그라운드 코드는 사용 방법을 보여줍니다 max()
.
let intMax = [12, 15, 6].max()
let stringMax = ["bike", "car", "boat"].max()
print(String(describing: intMax)) // prints: Optional(15)
print(String(describing: stringMax)) // prints: Optional("car")
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 routes = [
Route(distance: 20),
Route(distance: 30),
Route(distance: 10)
]
let maxRoute = routes.max()
print(String(describing: maxRoute)) // prints: Optional(Route with distance: 30)
# 2. 사용 Array
의를max(by:)
방법을
시퀀스 내부의 요소 유형이 Comparable
프로토콜을 준수하지 않는 경우 다음을 사용해야합니다.max(by:)
경우 다음 선언 이있는 합니다 .
@warn_unqualified_access func max(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> Element?
주어진 술어를 요소 간의 비교로 사용하여 시퀀스의 최대 요소를 리턴합니다.
다음 플레이 그라운드 코드는 사용 방법을 보여줍니다 max(by:)
.
let dictionary = ["Boat" : 15, "Car" : 20, "Bike" : 40]
let keyMaxElement = dictionary.max(by: { (a, b) -> Bool in
return a.key < b.key
})
let valueMaxElement = dictionary.max(by: { (a, b) -> Bool in
return a.value < b.value
})
print(String(describing: keyMaxElement)) // prints: Optional(("Car", 20))
print(String(describing: valueMaxElement)) // prints: Optional(("Bike", 40))
class Route: CustomStringConvertible {
let distance: Int
var description: String { return "Route with distance: \(distance)" }
init(distance: Int) {
self.distance = distance
}
}
let routes = [
Route(distance: 20),
Route(distance: 30),
Route(distance: 10)
]
let maxRoute = routes.max(by: { (a, b) -> Bool in
return a.distance < b.distance
})
print(String(describing: maxRoute)) // prints: Optional(Route with distance: 30)