Sie haben eine Reihe von Wörterbüchern der Form [String: String]
und ein Wörterbuch hat keine name
Eigenschaft, so $0.name
ungültig ist (in jede Swift-Version).
Das Abrufen des Wörterbuchwerts erfolgt über Subskribierung, z. B. , z. $0["name"]
, die eine optional zurückgibt. In Swift 2 können Sie Optionen direkt vergleichen (und nil
wurde als "weniger" als alle nicht-nil
Wert). Daher in Swift 2 könnten Sie das Array sortieren mit
arr.sortInPlace { $0["name"] < $1["name"] }
jedoch die optionalen Vergleichsoperatoren haben in Swift 3 mit der Umsetzung von SE-0121 – Remove Optional Comparison Operators entfernt.
Daher müssen Sie $0["name"]
auspacken. Wenn Sie 100% sicher sind, dass jedes Wörterbuch in dem Array einen „Namen“ können Sie Schlüssel dann auspacken gewaltsam als Ahmad F suggested
arr.sort { $0["name"]! < $1["name"]! }
hat Wenn das nicht dann einen Standardnamen liefern garantiert wird, beispielsweise die leere Zeichenkette über den Null-Koaleszenz-Operator ??
:
arr.sort { ($0["name"] ?? "") < ($1["name"] ?? "") }
Beispiel:
var arr = [["title":"Mrs","name":"Abc"], ["title":"Mr","name":"XYZ"], ["title": "Dr"]]
arr.sort { ($0["name"] ?? "") < ($1["name"] ?? "") }
print(arr)
// [["title": "Dr"], ["name": "Abc", "title": "Mrs"], ["name": "XYZ", "title": "Mr"]]
Als einer, das Wörterbuch ohne "namen" Schlüssel sieht zuerst bestellt. Eine einfache Möglichkeit, Einträge zu sortieren, ohne Namen letzte wäre:
arr.sort { ($0["name"] ?? "\u{10FFFF}") < ($1["name"] ?? "\u{10FFFF}") }
Bin ich der einzige, der über denkt „@MartinR kommt !!“? :) –
Punktnotation funktioniert nicht in * älteren swift * entweder. – vadian
Ich stimme zu, kann nicht sehen, wann es funktionieren kann. Ich würde verwenden, wenn man den Namen Wert zu fangen, aber wenn Sie etwas kurz 'arr.sorted {$ 0 ["Name"] wollen! <$ 1 ["Name"]! } ' – Dam