Сортировать массив в порядке сборки ..? - PullRequest
4 голосов
/ 28 апреля 2011

Извините, что задал глупый вопрос ..

У меня есть массив с объектами класса, такими как:

Class User {
     NSString *firstName, *LastName;
}
@property (nonatomic, retail) NSString *firstName;
@property (nonatomic, retail) NSString *LastName;

Я создаю объект этого класса и добавляю его в NSMutableArray.

Теперь я хочу отсортировать этот массив по имени. Любая идея, пожалуйста.

Могу ли я использовать NSSortDescriptor для сортировки этого массива или я должен использовать свою собственную логику.

Я делал это раньше, но сейчас я забыл об этом и сейчас у меня нет исходного кода для этого ...

Пожалуйста, помогите мне .. Спасибо

EDIT: Я получил несколько добрых ответов и пытался, но не работал. Я анализирую JSON, поэтому в myArray будет неизвестное количество объектов. Поэтому я использовал:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
[myArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

и

 NSMutableArray *tempArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

но ничего не получалось ..

Edit 2

Вот описание: Массив

    "<User: 0xa3f13c0>",
    "<User: 0xa3f1410>",
    "<User: 0xa3f1450>",
    "<User: 0xa3f1490>"

Сортированный массив

"<User: 0xa3f13c0>",
"<User: 0xa3f1410>",
"<User: 0xa3f1490>",
"<User: 0xa3f1450>"

In for Loop: Массив

John
abc
test
qwertg

Сортированный массив

John
abc
test
qwertg

Ответы [ 2 ]

9 голосов
/ 28 апреля 2011

Если вы ориентируетесь на iOS4 +, тогда вы можете использовать метод sortUsingComparator::

[yourArray sortUsingComparator:^(id obj1, id obj2){

        User* u1 = (User*)obj1;
        User* u2 = (User*)obj2;
        return [u1.firstName compare:u2.firstName];
    }];

Редактировать: Поскольку метод сравнения учитывает регистр символов, вам может потребоваться использовать caseInsensitiveCompare: метод вместо него:

[yourArray sortUsingComparator:^(id obj1, id obj2){

        User* u1 = (User*)obj1;
        User* u2 = (User*)obj2;
        return [u1.firstName caseInsensitiveCompare:u2.firstName];
    }];
4 голосов
/ 28 апреля 2011

Это, наверное, самый чистый способ сделать то, что вы ищете:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
[myArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

Интересный способ сортировки массивов - использование блоков кода, если вам не нужна обратная совместимость с pre ios4, хотя

[myMutableArray sortUsingComparator:
^(id a, id b) 
{
    User *userA = (User *)a;
    User *userB = (User *)b;
    return [userA.firstName compare:userB.firstName]; 
}];

Это позволит вам придерживаться некоторой дополнительной логики на случай, если вы захотите использовать дополнительные или другие условия сортировки в будущем.

...