Быстрая сортировка для сортировки массива по бизнес-ключу? - PullRequest
0 голосов
/ 27 ноября 2009

У меня есть массив объектов, размер которых я не могу предсказать. Содержимое массива является объектами модели со свойствами типа nsstring и nsnumber.

Мне нужно отсортировать массив по одному из свойств, nsnumber. Как бы вы сделали это в target-c / Cocoa? Реализовать быструю сортировку или какой-нибудь другой алгоритм (какой)? Какие-нибудь библиотеки, которые занимаются этим для вас?

Обновление Хотя приведенный ниже ответ верен, он работает только на 10.6, и я нацеливаюсь на 10.5.

Ответы [ 3 ]

3 голосов
/ 27 ноября 2009

NSArray имеет несколько методов сортировки. Учитывая ваш массив, arr,

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"numberProperty" ascending:YES];
NSArray *sortedArr = [arr sortedArrayUsingSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

даст вам массив, отсортированный (по возрастанию) по @ "numberProperty". Очевидно, вам придется заменить имя свойства NSNumber в объектах вашей модели на @"numberProperty".

Алгоритм сортировки не указан в методах сортировки NSArray.

0 голосов
/ 27 ноября 2009

Вот что я придумал:

NSArray *unsortedArray = [results allValues];
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] 
                    initWithKey:@"ordinalPosition" 
                      ascending:YES] 
                    autorelease];

NSArray *sortedArray = [unsortedArray 
                       sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
0 голосов
/ 27 ноября 2009

Используйте qsort() из stdlib.h.

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