array ios swift sorting swift2

ios - array - Swift 2.0 Ordenando matriz de objetos por propiedad



array filter swift 4 (4)

En Swift 2.0, ¿cómo haría para clasificar una matriz de objetos personalizados por una propiedad? Sé que en Swift 1.2, esto se hizo usando sorted () y sort (). Sin embargo, estos métodos ya no funcionan en Xcode 7 beta 4. ¡Gracias!

Por ejemplo:

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.


En Swift 2:

  • Puede usar el método de sort , usando compare para comparar las dos fechas:

    let sortedArray = myArray.sort { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sorted` in Swift 1.2

  • O bien, si desea ordenar la matriz original, puede sortInPlace :

    myArray.sortInPlace { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sort` in Swift 1.2

En Swift 3:

  • para devolver una interpretación ordenada de la matriz, use sorted , no sorted

    let sortedArray = myArray.sorted { $0.myDate < $1.myDate }

  • para ordenar en su lugar, ahora es solo sort :

    myArray.sort { $0.myDate < $1.myDate }

Y con el tipo de Date Swift 3, puede usar el operador < .


Si desea ordenar la matriz original de objetos personalizados. Aquí hay otra manera de hacerlo en Swift 2.1

var myCustomerArray = [Customer]() myCustomerArray.sortInPlace {(customer1:Customer, customer2:Customer) -> Bool in customer1.id < customer2.id }

Donde id es un Entero. También puede usar el mismo < operador para String .

Puede obtener más información sobre su uso consultando un ejemplo aquí: Swift2: Clientes cercanos


sort es ahora sortInPlace (o algo similar) con los mismos parámetros que sort.


En veloz 3.0

He tomado la suposición igual que el ejemplo formulado en la pregunta.

es decir, customObject es MyObject con la variable myDate. La matriz de MyObject es myArray. Podemos ordenar de esta manera simplemente.

myArray.sort(by: { (one: MyObject, two: MyObject) -> Bool in one. myDate < two. myDate })