Как мне отсортировать NSMutableArray с объектами класса в нем? - PullRequest
2 голосов
/ 23 февраля 2012

У меня есть класс Events

@interface MeEvents : NSObject {
    NSString* name;**strong text**
    NSString* location;

}

@property(nonatomic,retain)NSString* name;strong text
@property(nonatomic,retain)NSString* location;

В моем NSMutablArray я добавляю объект Events

Events* meEvent;
[tempArray addObject:meEvent];

Подскажите, пожалуйста, как отсортировать этот массив по имени члена.

Ответы [ 4 ]

4 голосов
/ 23 февраля 2012
NSSortDescriptor *sortDes = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
        [tempArray_ sortUsingDescriptors:[NSArray arrayWithObject:sortDes]];
        [sortDes release];
2 голосов
/ 23 февраля 2012

Самый простой способ - использовать sortUsingComparator: следующим образом:

[tempArray sortUsingComparator:^(id a, id b) {
    return [[a name] compare:[b name]];
}];

Если вы сортируете эти строки, потому что хотите показать отсортированный список пользователю, вместо этого вы должны localizedCompare::1006 *

[tempArray sortUsingComparator:^(id a, id b) {
    return [[a name] localizedCompare:[b name]];
}];

Или вы можете использовать localizedCaseInsensitiveCompare:.

2 голосов
/ 23 февраля 2012

Объявите это в верхней части файла реализации над строкой @interface

NSComparisonResult sortByName(id firstItem, id secondItem, void *context);

Ниже приведена реализация метода

NSComparisonResult sortByName(id item1, id item2, void *context)
{
    NSString *strItem1Name = [item1 name];
    NSString *strItem2Name = [item2 name];

    return [strItem1Name compare:strItem2Name]; //Ascending for strItem1Name you can reverse comparison for having descending result
}

Вот как вы бы его назвали

[tempArray sortUsingFunction:sortByName context:@"Names"];
1 голос
/ 23 февраля 2012

Вы можете отсортировать массив, используя NSArray 's

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator

способ

Подробнее см. этот SO ответ

...