Sortieren mit NSComparator
Wenn wir benutzerdefinierte Objekte sortieren wollen, müssen wir die NSComparator
die für den Vergleich von benutzerdefinierten Objekten verwendet wird. Der Block gibt ein NSComparisonResult
Wert, um die Reihenfolge der beiden Objekte zu bezeichnen. Um also ein ganzes Array zu sortieren NSComparator
wird auf folgende Weise verwendet.
NSArray *sortedArray = [employeesArray sortedArrayUsingComparator:^NSComparisonResult(Employee *e1, Employee *e2){
return [e1.firstname compare:e2.firstname];
}];
Sortieren mit NSSortDescriptor
Nehmen wir als Beispiel an, dass wir ein Array haben, das Instanzen einer benutzerdefinierten Klasse Employee mit den Attributen firstname, lastname und age enthält. Das folgende Beispiel veranschaulicht, wie ein NSSortDescriptor erstellt wird, der verwendet werden kann, um den Inhalt des Arrays in aufsteigender Reihenfolge nach dem Altersschlüssel zu sortieren.
NSSortDescriptor *ageDescriptor = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
NSArray *sortDescriptors = @[ageDescriptor];
NSArray *sortedArray = [employeesArray sortedArrayUsingDescriptors:sortDescriptors];
Sortieren mithilfe benutzerdefinierter Vergleiche
Namen sind Zeichenfolgen, und wenn Sie Zeichenfolgen sortieren, um sie dem Benutzer zu präsentieren, sollten Sie immer einen lokalisierten Vergleich verwenden. Oft möchte man auch einen Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung durchführen. Hier kommt ein Beispiel mit (localizedStandardCompare:), um das Array nach Vor- und Nachnamen zu sortieren.
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"lastName" ascending:YES selector:@selector(localizedStandardCompare:)];
NSSortDescriptor * firstNameDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"firstName" ascending:YES selector:@selector(localizedStandardCompare:)];
NSArray *sortDescriptors = @[lastNameDescriptor, firstNameDescriptor];
NSArray *sortedArray = [employeesArray sortedArrayUsingDescriptors:sortDescriptors];
Für Referenzen und ausführliche Diskussionen siehe: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html
http://www.ios-blog.co.uk/tutorials/objective-c/how-to-sort-nsarray-with-custom-objects/