How do I sort an NSMutableArray with custom objects in it?

前端 未结 27 3919
予麋鹿
予麋鹿 2020-11-21 04:45

What I want to do seems pretty simple, but I can\'t find any answers on the web. I have an NSMutableArray of objects, and let\'s say they are \'Person\' objects

27条回答
  •  没有蜡笔的小新
    2020-11-21 05:03

    Sort using NSComparator

    If we want to sort custom objects we need to provide NSComparator, which is used to compare custom objects. The block returns an NSComparisonResult value to denote the ordering of the two objects. So in order to sort whole array NSComparator is used in following way.

    NSArray *sortedArray = [employeesArray sortedArrayUsingComparator:^NSComparisonResult(Employee *e1, Employee *e2){
        return [e1.firstname compare:e2.firstname];    
    }];
    

    Sorts Using NSSortDescriptor
    Let’s assume, as an example, that we have an array containing instances of a custom class, Employee has attributes firstname, lastname and age. The following example illustrates how to create an NSSortDescriptor that can be used to sort the array contents in ascending order by the age key.

    NSSortDescriptor *ageDescriptor = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
    NSArray *sortDescriptors = @[ageDescriptor];
    NSArray *sortedArray = [employeesArray sortedArrayUsingDescriptors:sortDescriptors];
    

    Sort using Custom Comparisons
    Names are strings, and when you sort strings to present to the user you should always use a localized comparison. Often you also want to perform a case insensitive comparison. Here comes an example with (localizedStandardCompare:) to order the array by last and first name.

    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];
    

    For reference and detailed discussion please refer: 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/

提交回复
热议问题