Dans Swift 2.0, comment procéder pour trier un tableau d'objets personnalisés par propriété? Je sais que dans Swift 1.2, cela a été fait en utilisant sorted () et sort (). Cependant, ces méthodes ne fonctionnent plus dans Xcode 7 beta 4. Merci!
Par exemple:
class MyObject: NSObject {
var myDate : NSDate
}
...
let myObject1 : MyObject = MyObject() //same thing for myObject2, myObject3
var myArray : [MyObject] = [myObject1, myObject2, myObject3]
//now, I want to sort myArray by the myDate property of MyObject.
Dans Swift 2:
Vous pouvez utiliser la méthode sort
, en utilisant compare
pour comparer les deux dates:
let sortedArray = myArray.sort { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sorted` in Swift 1.2
Ou, si vous souhaitez trier le tableau d'origine, vous pouvez sortInPlace
:
myArray.sortInPlace { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sort` in Swift 1.2
Dans Swift 3:
pour renvoyer un rendu trié du tableau, utilisez sorted
, pas sort
let sortedArray = myArray.sorted { $0.myDate < $1.myDate }
pour trier sur place, c'est juste sort
:
myArray.sort { $0.myDate < $1.myDate }
Et avec Swift 3 type Date
, vous pouvez utiliser le <
opérateur.
Si vous souhaitez trier le tableau original d'objets personnalisés. Voici une autre façon de le faire dans Swift 2.1
var myCustomerArray = [Customer]()
myCustomerArray.sortInPlace {(customer1:Customer, customer2:Customer) -> Bool in
customer1.id < customer2.id
}
Où id
est un entier. Vous pouvez utiliser le même <
opérateur pour String
également.
Vous pouvez en savoir plus sur son utilisation en consultant un exemple ici: Swift2: Clients à proximité
Dans Swift 3.
J'ai pris l'hypothèse la même que l'exemple posé dans la question.
i.e customObject est MyObject avec la variable myDate. Le tableau du MyObject est myArray. Nous pouvons trier comme ceci simplement.
myArray.sort(by: { (one: MyObject, two: MyObject) -> Bool in
one. myDate < two. myDate
})