I dizionari non possono essere ordinati, quindi è necessario convertirlo in un array. La funzione map
può farlo per te. Inoltre, le stringhe non possono essere ordinate come fornite, quindi è necessario ristrutturare la stringa nel formato yyyy-MM-dd
o convertirla in data.
Ma una volta fatto, è possibile ordinare l'array. Ad esempio, utilizzando la programmazione funzionale a Swift, si potrebbe fare qualcosa di simile a quanto segue, che utilizza map
per convertire il dizionario per una serie di tuple, e quindi utilizza sorted
per ordinare questi, utilizzando NSDateFormatter
per convertire le stringhe di date:
var dayTotalDictionary: [String:Int] = [
"04-09-2015" : 4,
"04-10-2015" : 6,
"04-07-2015" : 8,
"03-28-2015" : 10,
"12-10-2014" : 12,
"12-10-2015" : 12
]
let formatter = NSDateFormatter()
formatter.dateFormat = "MM-dd-yyyy"
let dayTotalArray = map(dayTotalDictionary) { ($0, $1) }
.sorted() { formatter.dateFromString($0.0)!.compare(formatter.dateFromString($1.0)!) == .OrderedAscending }
Mentre ciò gode di una certa semplicità, è probabilmente un po 'inefficiente, chiamando dateFromString
più del necessario. Quindi, probabilmente hanno la funzione map
aggiungere l'oggetto NSDate
alla matrice di tuple, e quindi sorted
possono usufruire dell'oggetto NSDate
che è già presente:
let dayTotalArray = map(dayTotalDictionary) { (formatter.dateFromString($0)!, $0, $1) } // in Swift 2.0, use `dayTotalDictionary.map()`
.sorted() { ($0.0 as NSDate).compare($1.0 as NSDate) == .OrderedAscending } // in Swift 2.0, use `sort`
.map() { (_, dateString, dayTotal) in (dateString, dayTotal) }
Quella finale map
tira fuori l'oggetto NSDate
, ma chiaramente non hai bisogno di farlo se stai bene mantenendo lo NSDate
nella tupla.
Nella maggior parte delle lingue, non è possibile ordinare le chiavi in un dizionario. Non è questo il punto di un dizionario. Un dizionario è per l'inserimento e il recupero a tempo costante. E per le chiavi che non sono numeri interi. Se inserisci le coppie di valori chiave in un elenco, puoi ordinarlo. –
dayTotalArrayTest non è un array è un dizionario. Non si può effettivamente ordinare un dizionario –