web-dev-qa-db-fra.com

Swift 2.0 Tableau de tri des objets par propriété

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.
39
felix_xiao

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.

76
Rob

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
    }

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é

10
Hanny

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
})
0
jaiswal Rajan