2017-03-15 4 views
-1
let dict1:NSMutableDictionary = ["no": "10", "name": "Joy" ,"age":39] 
let dict2:NSMutableDictionary = ["no": "33", "name": "Lily" ,"age":30] 
let dict3:NSMutableDictionary = ["no": "19", "name": "Candy","age":22] 
var arrPoint = [Any]() 
arrPoint.append(dict1) 
arrPoint.append(dict2) 
arrPoint.append(dict3) 

, wie durch die Anzahl der Elemente zu sortieren?Sortierung NSMutableDictionary in Swift 3

Ergebnis wie folgt:

no = 10 , name = Joy 
no = 19 , name = Candy 
no = 33 , name = Lily 

Antwort

2

Sie können sortieren sie mit:

arrPoint = arrPoint.map { $0 as! NSMutableDictionary }.sorted { Int($0["no"] as! String)! < Int($1["no"] as! String)! } 

Wie Sie es gibt eine ganze Menge Chaos in den Verschlüssen los zu sehen. Ich muss zuerst alles im Array in NSMutableDictionary konvertieren, die Zeichenfolge, die ich vom Schlüssel "no" erhalten habe, in eine ganze Zahl konvertieren und vergleichen. Es gibt offensichtlich bessere Wege.

Wenn Sie können, erstellen Sie eine Struktur. Vielleicht nennen Sie es Employee? (Sie scheinen Wörterbücher der Mitarbeiter zu erstellen, jeder von ihnen hat ein Alter, einen Namen und eine Nummer)

struct Employee { 
    var age: Int 
    var name: String 
    var number: Int 
} 

Dann können Sie einfach Employee Arrays erstellen und sie wie folgt sortieren:

array = array.sorted { $0.number < $1.number } 
2

Vor allem, verwenden Sie nicht NSMutableDictionary in Swift überhaupt. Verwenden Sie Swift native Typen:

let dict1 : [String:Any] = ["no": "10", "name": "Joy" ,"age":39] 
let dict2 : [String:Any] = ["no": "33", "name": "Lily" ,"age":30] 
let dict3 : [String:Any] = ["no": "19", "name": "Candy","age":22] 

var arrPoint = [[String:Any]]() 

arrPoint.append(dict1) 
arrPoint.append(dict2) 
arrPoint.append(dict3) 

Keinerlei das Array mit der sort Funktion

arrPoint.sort(by: { ($0["no"] as! String) < $1["no"] as! String }) 

Allerdings würde ich empfehlen, auch eine eigene Struktur zu verwenden, wie in Sweeper Antwort.