Swiftで配列を並べ替え
以下のSwifty
人にとっては、グローバルに上記の目標を達成するための非常にクリーンなテクニックです。User
いくつかの属性を持つカスタムクラスの例を見てみましょう。
class User: NSObject {
var id: String?
var name: String?
var email: String?
var createdDate: Date?
}
これでcreatedDate
、昇順または降順、あるいはその両方に基づいてソートする必要がある配列ができました。それでは、日付を比較する関数を追加しましょう。
class User: NSObject {
var id: String?
var name: String?
var email: String?
var createdDate: Date?
func checkForOrder(_ otherUser: User, _ order: ComparisonResult) -> Bool {
if let myCreatedDate = self.createdDate, let othersCreatedDate = otherUser.createdDate {
//This line will compare both date with the order that has been passed.
return myCreatedDate.compare(othersCreatedDate) == order
}
return false
}
}
extension
のArray
forを見てみましょうUser
。簡単に言えば、User
オブジェクトしか含まれていない配列に対してのみ、いくつかのメソッドを追加できます。
extension Array where Element: User {
//This method only takes an order type. i.e ComparisonResult.orderedAscending
func sortUserByDate(_ order: ComparisonResult) -> [User] {
let sortedArray = self.sorted { (user1, user2) -> Bool in
return user1.checkForOrder(user2, order)
}
return sortedArray
}
}
昇順の使用法
let sortedArray = someArray.sortUserByDate(.orderedAscending)
降順の使用法
let sortedArray = someArray.sortUserByDate(.orderedAscending)
同じ注文の使用法
let sortedArray = someArray.sortUserByDate(.orderedSame)
上記のメソッドは、タイプが
||のextension
場合にのみアクセスできます。Array
[User]
Array<User>