スウィフト5と、Array
その他のようなSequence
プロトコル適合オブジェクト(Dictionary
、Set
など)、2と呼ばれるメソッドがありmax()
且つmax(by:)
そのリターン最大要素配列またはnil
配列が空の場合を。
#1。Array
のmax()
方法を使用する
あなたのシーケンス準拠の内部要素の型ならばComparable
プロトコル(それはかもしれString
、Float
、Character
またはカスタムクラスまたは構造体の1つ)は、使用することができるようになりますmax()
次がある宣言を。
@warn_unqualified_access func max() -> Element?
シーケンスの最大要素を返します。
次のPlaygroundコードは使用方法を示しています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?
要素間の比較として指定された述語を使用して、シーケンスの最大要素を返します。
次のPlaygroundコードは使用方法を示しています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)