2014-07-06 16 views
16

Supponiamo di avereOrdina una serie di dizionari a Swift

var filesAndProperties:Dictionary<String, Any>[]=[] //we fill the array later 

Quando provo l'ordinamento della matrice utilizzando

filesAndProperties.sort({$0["lastModified"] > $1["lastModified"]}) 

Xcode dice "Impossibile trovare membro pedice".

Come si ordina una matrice di tali dizionari per valori in una chiave specifica?

risposta

42

Il messaggio di errore è fuorviante. Il vero problema è che il compilatore Swift fa non sa che tipo di oggetto è $0["lastModified"] e come confrontarli.

quindi bisogna essere un po 'più esplicito, ad esempio

filesAndProperties.sort { 
    item1, item2 in 
    let date1 = item1["lastModified"] as Double 
    let date2 = item2["lastModified"] as Double 
    return date1 > date2 
} 

numeri in virgola se i timestamp sono galleggianti, o

filesAndProperties.sort { 
    item1, item2 in 
    let date1 = item1["lastModified"] as NSDate 
    let date2 = item2["lastModified"] as NSDate 
    return date1.compare(date2) == NSComparisonResult.OrderedDescending 
} 

se i timestamp sono NSDate oggetti.

1

Qui, il problema è che il compilatore non è in grado di capire che cosa sia l'oggetto $ 0 ["lastModified"].

se i timestamp sono numeri in virgola mobile: -

filesAndProperties = filesAndProperties.sorted(by: { 
       (($0 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)! < (($1 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)! 
      }) 
Problemi correlati