2016-07-03 28 views
11

ho un vettore contenente un oggetto chiamato HistoryObject e ha proprietà quali "data", "Nome", eccordinare gli oggetti in Array Data

sto SORTING matrice in questo modo:

let sortedArray = HistoryArray.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedDescending}) 

che dovrebbe ordinare la data dal più recente al più vecchio. Per esempio:

  • 30 giu, il 2016
  • 29 giu, 2016

ecc ..

Ma quando il mio array contiene "2 luglio 2016" l'array ordinato diventa:

  • 30 giugno 2016
  • 29 Giugno 2016
  • lug 2, 2016

Dove "2 Luglio 2016" dovrebbe essere in cima dopo l'ordinamento, ora è sul fondo? Come posso risolvere questo problema?

+0

Hai utilizzato di nuovo la funzione di ordinamento? Questo non può essere impostato automaticamente. L'unico modo per ordinarlo ogni volta che aggiungi un nuovo oggetto, puoi creare un'estensione dell'array e ogni volta che usi AddObject, ad esempio, devi chiamare questa funzione di ordinamento. –

+0

intendevo dopo aver ottenuto l'array completo da API, ho ordinato l'intero array con i suoi oggetti, il che significa che non aggiungere oggetti dopo l'ordinamento. ma non lo sta ordinando correttamente. @AltimirAntonov –

+0

Converti prima la stringa in NSDate. Scriverò la risposta in pochi minuti. –

risposta

23

Utilizzando Swift 4 & Swift 3

let testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 
var convertedArray: [Date] = [] 

var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd MM, yyyy"// yyyy-MM-dd" 

for dat in testArray { 
    let date = dateFormatter.date(from: dat) 
    if let date = date { 
     convertedArray.append(date) 
    } 
} 

var ready = convertedArray.sorted(by: { $0.compare($1) == .orderedDescending }) 

print(ready) 

Utilizzando Swift 2

Per esempio si ha la matrice con date e un altro 1 array, dove potrete salvare le date convertiti:

var testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 
var convertedArray: [NSDate] = [] 

Dopo di che convertiamo le date:

var dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "dd MM, yyyy"// yyyy-MM-dd" 

for dat in testArray { 
    var date = dateFormatter.dateFromString(dat) 
    convertedArray.append(date!) 
} 

E il risultato:

var ready = convertedArray.sort({ $0.compare($1) == .OrderedDescending }) 

print(ready) 
10

Per Swift 3

var testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 
var convertedArray: [Date] = [] 

var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd/MM/yyyy" 

for dat in testArray { 
    var date = dateFormatter.date(from: dat) 
    convertedArray.append(date!) 
} 

//Approach : 1 
convertedArray.sort(){$0 < $1}  

//Approach : 2 
convertedArray.sorted(by: {$0.timeIntervalSince1970 < $1.timeIntervalSince1970}) 

print(convertedArray) 
1

Evitare variabile in più di convertedArray

Utilizzando Swift 4 0.123.Swift 3

let testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 

var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd MM, yyyy"// yyyy-MM-dd" 

var ready = convertedArray.sorted(by: { dateFormatter.date(from:$0).compare(dateFormatter.date(from:$1)) == .orderedDescending }) 

print(ready) 
Problemi correlati