2016-05-27 10 views
6
[{ 
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; 
}] 
  • Ich habe ein Array wie diese sortieren. Ich möchte dieses Array mit Timestamp in Swift 2.3 oder der neuesten Version von Swift sortieren. Kann mir jemand dafür helfen?
+1

Aufsteigende Reihenfolge von was? Name? Zeitstempel? Nutzername? – Thilo

+0

Entschuldigung, ich habe das vergessen. Es ist timestamp – Jecky

+0

Überprüfen Sie diese Antwort: http://StackOverflow.com/A/4685377/3202193 –

Antwort

7
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)") 
0

=> Konvertieren Sie zuerst Ihren Json in Objekte. (Lesen Sie in diesem Link zu tun, dass: - http://roadfiresoftware.com/2015/10/how-to-parse-json-with-swift-2/)

=> Dann wird Ihr Array als typisierte Array deklarieren, so dass Sie Methoden aufrufen können, wenn Sie durchlaufen:

var array : [yourObjectClassName] = [] 

=> Dann können Sie einfach die sortieren Wert von:

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

Das obige Beispiel sortiert alle Arrays nach Namen. Wenn Sie von Zeitpunkt sortieren mögen, können Sie den Namen ..etc

prüfen, um weitere Sortier Beispiele auf diesen Link zu ändern: Swift how to sort array of custom objects by property value

+0

Dies sieht nicht wie JSON aus. – Thilo

+0

Ich wurde @ @ FNC12 Antwort beziehen und lehrte es war JSON: p –

4

Wenn Ihr Array ist veränderbar Sie können Benutzer sortInPlace

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

und wenn nicht, können Sie ein neues Array von Art erstellen, wie von Kristijan vorgeschlagen (obwohl nicht nötig Klammern auf Hinter Schließungen):

let newArray = yourArray.sort{$0.timestamp < $1.timestamp} 
1

von Eigentum „Zeitstempel“

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

Sie können diese Funktionalität mit Erweiterung erhalten:

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 
    } 
} 

Verwendung wie folgt aus:

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) 
Verwandte Themen