Сортируем массив, используя класс NSSortDescriptor (часть 2)

Предположим, что у нас есть массив студентов, каждый из которых представлен объектом простого класса Student. Задача стоит в том, чтобы отсортировать массив этих студентов по определенным полям.


@interface Student : NSObject
{
NSString *fio;
NSString *faculty;
NSNumber *age;
}
- (id)initWithFIO:(NSString *)_fio faculty:(NSString *)_faculty age:(NSNumber *)_age;
@end;
- (void) sortArray {
NSMutableArray *array = [NSMutableArray array];
// создаем и кладем студентов в массив
[array addObject:[[[Student alloc] initWithFIO:@"Sidorov" faculty:@"FKSIS" age:[NSNumber numberWithInt:19]] autorelease]];
[array addObject:[[[Student alloc] initWithFIO:@"Ivanov" faculty:@"FKSIS" age:[NSNumber numberWithInt:20]] autorelease]];
[array addObject:[[[Student alloc] initWithFIO:@"Ivanov" faculty:@"FITU" age:[NSNumber numberWithInt:21]] autorelease]];
[array addObject:[[[Student alloc] initWithFIO:@"Petrov" faculty:@"VF" age:[NSNumber numberWithInt:20]] autorelease]];
[array addObject:[[[Student alloc] initWithFIO:@"Ershov" faculty:@"FRE" age:[NSNumber numberWithInt:20]] autorelease]];

// поля, по которым будет выполняться сортировка.
// они должны строго соответствовать переменным класса Student.
NSString *FIO = @"fio";
NSString *FACULTY = @"faculty";

// создаем объекты класса NSSortDescriptor, которые будут использоваться для сортировки
NSSortDescriptor *fioDescriptor = [[[NSSortDescriptor alloc] initWithKey:FIO ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
NSSortDescriptor *facultyDescriptor = [[[NSSortDescriptor alloc] initWithKey:FACULTY ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];

// в данном случае сортировка будет вначале производиться по ФИО, а затем по факультету.
// если же дескрипторы поменять местами, то сначала отсортировано будет по факультету, а затем по ФИО.
NSArray *descriptors = [NSArray arrayWithObjects:fioDescriptor, facultyDescriptor, nil];
[fioDescriptor release];
[facultyDescriptor release];
// непостредственно сортируем массив, используя ранее созданные десктрипторы
NSArray *sortedArray = [array sortedArrayUsingDescriptors:descriptors];
// сейчас массив уже отсортирован
}

Рейтинг
( Пока оценок нет )
webnewsite.ru / автор статьи
Загрузка ...

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: