Cómo orderar una matriz en un order ascendente swift 2.3

[{ msg = "Hi This is Jecky"; name = Susheel; sender = 77; timestamp = 1464241769520; username = susheel; }, { msg = Dubai; name = Jecky; sender = 78; timestamp = 1464246547147; username = Jecky; }, { msg = "How are you ?"; name = Susheel; sender = 77; timestamp = 1464243480381; username = susheel; }, { msg = "Aje dekhai nai"; name = Jecky; sender = 78; timestamp = 1464244974198; username = Jecky; }] 
  • Tengo una matriz como esta. Quiero orderar este set usando timestamp en swift 2.3 o la última versión de swift. ¿Alguien puede ayudarme por esto?

 let array=[ [ "msg":"Hi This is Jecky", "name":"Susheel", "sender":77, "timestamp":1464241769520, "username":"susheel", ], [ "msg":"Dubai", "name":"Jecky", "sender":78, "timestamp":1464246547147, "username":"Jecky", ], [ "msg":"How are you ?", "name":"Susheel", "sender":77, "timestamp":1464243480381, "username":"susheel", ], [ "msg":"Aje dekhai nai", "name":"Jecky", "sender":78, "timestamp":1464244974198, "username":"Jecky", ], ] print("array = \(array)") let sortedArray=array.sort { (obj1, obj2) -> Bool in return (obj1["timestamp"] as! Double) < (obj2["timestamp"] as! Double) } print("sortedArray = \(sortedArray)") 

Si su matriz es mutable, puede usar sortInPlace

 yourArray.sortInPlace{$0.timestamp < $1.timestamp} 

y si no, puede crear una nueva matriz de order, como sugirió Kristijan (aunque no es necesario paréntesis en cierres finales):

 let newArray = yourArray.sort{$0.timestamp < $1.timestamp} 
 customArray.sortInPlace { (element1, element2) -> Bool in return element1.someSortableField < element2.someSortableField } 

Mira esto https://www.hackingwithswift.com/example-code/arrays/how-to-sort-an-array-using-sort

=> Primero, convierte tu Json a objects. (marque este enlace para hacer eso: – http://roadfiresoftware.com/2015/10/how-to-parse-json-with-swift-2/ )

=> Luego declara tu Array como una matriz mecanografiada para que puedas llamar a los methods cuando se itera:

 var array : [yourObjectClassName] = [] 

=> Entonces, simplemente puede orderar el valor por:

 array.sort({ $0.name > $1.name }) 

El ejemplo anterior ordera todas las matrices por nombre. Si necesita orderar por timeStamp puede cambiar el nombre a timeStamp ..etc

Consulte este enlace para get más ejemplos de orderación: Swift cómo orderar una orderación de objects personalizados por valor de propiedad

Para orderar por propiedad "timestamp"

 array.sorted{$1["timestamp"] as? Long > $0["timestamp"] as? Long} 

Puede get esta funcionalidad usando la extensión:

 extension NSArray{ //sorting- ascending func ascendingArrayWithKeyValue(key:String) -> NSArray{ let ns = NSSortDescriptor.init(key: key, ascending: true) let aa = NSArray(object: ns) let arrResult = self.sortedArray(using: aa as! [NSSortDescriptor]) return arrResult as NSArray } //sorting - descending func discendingArrayWithKeyValue(key:String) -> NSArray{ let ns = NSSortDescriptor.init(key: key, ascending: false) let aa = NSArray(object: ns) let arrResult = self.sortedArray(using: aa as! [NSSortDescriptor]) return arrResult as NSArray } } 

use así:

  let array=[ [ "msg":"Hi This is Jecky", "name":"Susheel", "sender":77, "timestamp":1464241769520, "username":"susheel", ], [ "msg":"Dubai", "name":"Jecky", "sender":78, "timestamp":1464246547147, "username":"Jecky", ], [ "msg":"How are you ?", "name":"Susheel", "sender":77, "timestamp":1464243480381, "username":"susheel", ], [ "msg":"Aje dekhai nai", "name":"Jecky", "sender":78, "timestamp":1464244974198, "username":"Jecky", ], ] let a = NSArray.init(array: array) let filArray = a.ascendingArrayWithKeyValue(key: "timestamp") print(filArray)