Ich habe eine NSArray
, die Datumszeichenfolgen (dh NSString) wie folgt enthält : "Do, 21. Mai 09 19:10:09 -0700"
Ich muss das NSArray
Datum sortieren . Ich dachte zuerst darüber nach, die Datumszeichenfolge in ein NSDate
Objekt zu konvertieren , blieb aber dort hängen, wie man nach dem NSDate
Objekt sortiert .
Vielen Dank.
Antworten:
Speichern Sie die Daten als
NSDate
Objekte in einem NS-Array (veränderbar) und verwenden Sie dann-[NSArray sortedArrayUsingSelector:
oder-[NSMutableArray sortUsingSelector:]
und übergeben Sie sie@selector(compare:)
als Parameter. Die-[NSDate compare:]
Methode ordnet die Daten in aufsteigender Reihenfolge für Sie. Dies ist einfacher als das Erstellen einerNSSortDescriptor
und viel einfacher als das Schreiben einer eigenen Vergleichsfunktion. (NSDate
Objekte wissen, wie sie sich mindestens so effizient miteinander vergleichen können, wie wir es uns mit benutzerdefiniertem Code erhoffen können.)quelle
Wenn ich eines
NSMutableArray
von Objekten mit einem Feld "beginDate" vom TypNSDate
habe, verwende ich einesNSSortDescriptor
wie folgt :quelle
-[NSMutableArray sortUsingComparator:]
(10.6+) verwenden und einen Block übergeben, der das Ergebnis des Aufrufs-compare:
der beiden Felder zurückgibt . Es wäre wahrscheinlich schneller als-valueForKey:
jedes Objekt aufzurufen . Sie können sogar-sortWithOptions:usingComparator:
Optionen verwenden und übergeben, um gleichzeitig zu sortieren.Sie können auch Folgendes verwenden:
Dies setzt jedoch voraus, dass das Datum
NSDate
eher als a gespeichert wirdNString
, was kein Problem sein sollte. Vorzugsweise empfehle ich, die Daten auch im Rohformat zu speichern. Erleichtert die Manipulation in solchen Situationen.quelle
Sie können Blöcke verwenden, um an Ort und Stelle zu sortieren:
Ich schlage vor, dass Sie alle Ihre Zeichenfolgen vor dem Sortieren in Datumsangaben konvertieren, um die Konvertierung nicht öfter als bei Datumsangaben durchzuführen. Jeder Sortieralgorithmus gibt Ihnen mehr Konvertierungen von Zeichenfolgen in Datumsangaben als die Anzahl der Elemente im Array (manchmal wesentlich mehr).
Ein bisschen mehr zum Sortieren von Blöcken: http://sokol8.blogspot.com/2011/04/sorting-nsarray-with-blocks.html
quelle
In meinem Fall funktionierte Folgendes:
Ich hatte ein Wörterbuch, in dem alle Schlüssel im Format TT-MM-JJJJ datiert waren. Und allKeys gibt die Wörterbuchschlüssel unsortiert zurück, und ich wollte die Daten in chronologischer Reihenfolge präsentieren.
quelle
Sie können verwenden
sortedArrayUsingFunction:context:
. Hier ist ein Beispiel:Wenn Sie a verwenden
NSMutableArray
, können SiesortArrayUsingFunction:context:
stattdessen verwenden.quelle
NSDate
Objekte enthält , können Sie meine Antwort oben verwenden oder sogar verwenden-[NSMutableArray sortUsingComparator:]
, die in 10.6 hinzugefügt wurde.Sobald Sie eine haben
NSDate
, können Sie eineNSSortDescriptor
mit erstelleninitWithKey:ascending:
und dannsortedArrayUsingDescriptors:
die Sortierung durchführen.quelle
Swift 3.0
quelle
Ändere das
Zu
Ändern Sie einfach den SCHLÜSSEL: Es muss
Date
immer seinquelle