Поиск по этому блогу

воскресенье, 11 мая 2014 г.

iOS 7. Как отсортировать массив

Как отсортировать массив строк по алфавиту

(Как отсортировать NSMutableArray и NSArray)


Допустим есть два массива строк NSArray и NSMutableArray, необходимо отсортировать их по алфавиту.
@property (retain, nonatomic) NSArray *techList;
@property (retain, nonatomic) NSMutableArray *toolList;

Для сортировки NSArray и NSMutableArray используются разные методы.
Для того, чтобы отсортировать NSArray необходимо  воспользоваться методом
- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors;  

Этот метод вернет новый отсортированный массив.

Для того, чтобы отсортировать NSMutableArray необходимо  воспользоваться методом
- (void)sortUsingDescriptors:(NSArray *)sortDescriptors; 

Этот метод отсортирует уже существующий массив

Сортировать массивы будем следующим образом

Сортируем NSArray
NSArray sortedTechList = [techList sortedArrayUsingSelector:
                       @selector(localizedCaseInsensitiveCompare:)];

Сортируем NSMutableArray
[toolList sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

Как отсортировать массив объектов по полю

(Как отсортировать NSMutableArray и NSArray)

Теперь допустим нам необходимо отсортировать массив объектов по определенному полю. Здесь ситуация такая же как и с сортировкой массива строк. Для разных массивов используются разные методы. Если нам необходимо отсортировать массив объектов по полю name, то тогда нам понадобиться воспользоваться классом NSSortDescriptor и методом sortDescriptorWithKey

Сортируем NSArray
NSSortDescriptor *sortDescriptor =
    [NSSortDescriptor sortDescriptorWithKey:@"name"
                                  ascending:YES
                                   selector:@selector(caseInsensitiveCompare:)];
NSArray sortedTechList = [techList sortedArrayUsingDescriptors:@[sortDescriptor]];

Сортируем NSMutableArray
[toolList sortUsingDescriptors:
                    [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" 
                       ascending:YES 
                       selector:@selector(caseInsensitiveCompare:)]]];


Комментариев нет:

Отправить комментарий