2017-12-15 1 views
0

Ich muss ein Array von JSON-Objekten sortieren.Array von JSON-Objekten sortieren

, aber es muss von einer wörtlichen Bedeutung in eine numerische Bedeutung übersetzt werden.

zum Beispiel

Objekt [ "Status"]

"Neu" = 1

"Open" = 2

"Closed" = 3

/// Ich muss hier einige übersetzen wo

var sortedOrders = orders.sort { $0["status"].doubleValue < $1["status"].doubleValue } 

Antwort

1

Sie könnten dies mit einem Enum tun.

var myStatus = Status(string: object["status"]) 

Und es wie folgt verwenden:

print(myStatus) // prints "new" 
print(myStatus.rawValue) // prints "1" 

Edit:

enum Status: Int { 
    case new = 1 
    case open = 2 
    case closed = 3 
    case unknown = 99 

    init(string: String) { 
     switch string { 
     case "new", "New": self = .new 
     case "open", "Open": self = .open 
     case "closed", "Closed": self = .closed 
     default: 
      self = .unknown 
     } 
    } 
} 

ENUM verwenden können, wie dies nicht initialisieren Da die Enum hat einen zugrunde liegenden Typ Int, Um Ihre Sortierung durchzuführen, können Sie den resultierenden Status direkt vergleichen (Dank dieser Frage https://stackoverflow.com/a/27871946/1718685):

var sortedOrders = orders.sort { Status(string: $0["status"]) < Status(string: $1["status"]) } 
+0

Ich mag diese Implementierung besser als meine. Ich habe am Ende eine Funktion erstellt, um die "Übersetzung" zu einem numerischen Wert zu machen. – Arcadian

0

Hier ist eine Art und Weise:

let statuses = [ "New", "Open", "Closed" ] 
var sortedOrders = orders.sort { (statuses.index(of: $0["status"] ?? "") ?? 99) < (statuses.index(of: $1["status"] ?? "") ?? 99) } 

Dies wird den Index jeden Status innerhalb des statuses Array bestimmen. 99 wird für unbekannte oder fehlende Status verwendet, so dass alle unbekannten Status am Ende der Liste angezeigt werden.