2012-10-16 17 views
21

Mögliche Duplizieren:
How to sort an NSMutableArray with custom objects in it?Sortieren Array von Objekten durch ihre NSDate Eigenschaft

Wie funktioniert eine Art ein Array von Objekten durch ihre Eigenschaften NSDate zugreifen?

Ich weiß, man kann [mutableArray sortUsingSelector:@selector(compare:)]; für ein Array von Daten verwenden, aber wie macht man das, indem man auf eine NSDate-Eigenschaft für jedes Element im Array zugreift und die Objekte nach frühestem Datum bis spätestem Datum sortiert?

Antwort

31

Danke für alle Antworten, stieß ich auf diese Antwort, die mein Problem gelöst. Hier Check NSGod's answer

ist der Code durch Anwender: NSGod:

NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
           sortDescriptorWithKey:@"startDateTime" 
              ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; 
NSArray *sortedEventArray = [nodeEventArray 
    sortedArrayUsingDescriptors:sortDescriptors]; 
0

Sie können die Vergleichsmethode in Ihrer benutzerdefinierten Klasse überschreiben, sodass sie zwei Objekte Ihrer benutzerdefinierten Klasse vergleicht und das entsprechende NSComparisonResult entsprechend den Daten der Objekte zurückgibt.

ZB:

-(NSComparisonResult)compare:(YourClass*)otherObject 
{ 
    return [self.date compare:otherObject.date]; 
} 
8

Sie verwenden können:

NSArray *sortedArray = [mutableArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
     NSDate *first = [(Person*)a birthDate]; 
     NSDate *second = [(Person*)b birthDate]; 
     return [first compare:second]; 
    }]; 

Oder sehen Sie diese link

12
NSSortDescriptor* sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"nsdatepropertyname" ascending:YES]; 
    [mutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByDate]]; 
+2

Um es etwas prägnanter, können Sie die zweite Zeile wie diese schreiben könnte: '[MutableArray sortUsingDescriptors: @ [sortByDate]];' –

+2

Um etwas mehr (wenn nötig) zu verdeutlichen, gibt 'sortUsingDescriptors:' das sortierte 'NSArray' zurück. Wahrscheinlich willst du das einer anderen Variablen zuweisen und es von dort nehmen wie in [Helium3's Antwort] (http://stackoverflow.com/a/12913805/2192331). –

0

Es gibt eine Methode namens -[NSArray sortedArrayUsingComparator:]. Sie benötigen einen Block, in dem Sie alle Vergleiche durchführen können, die für Ihre Objekte geeignet sind.

Verwandte Themen