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

У меня есть NSArray 'generic Objects', который содержит следующие свойства

-name
-id
-type (question, topic or user)

Как мне отсортировать этот массив универсального объекта по типу универсального объекта? Например. Я хочу, чтобы все общие объекты типа «топик» отображались вверху, а затем «пользователи», а не «вопросы»

1 Ответ

5 голосов
/ 09 января 2012

Вам необходимо определить пользовательскую функцию сортировки, а затем передать ее в метод NSArray, который позволяет настраивать пользовательскую сортировку. Например, используя sortedArrayUsingFunction:context:, вы могли бы написать (предполагая, что ваши типы являются экземплярами NSString):

NSInteger customSort(id obj1, id obj2, void *context) {
    NSString * type1 = [obj1 type];
    NSString * type2 = [obj2 type];

    NSArray * order = [NSArray arrayWithObjects:@"topic", @"users", @"questions", nil];

    if([type1 isEqualToString:type2]) {
        return NSOrderedSame; // same type
    } else if([order indexOfObject:type1] < [order indexOfObject:type2]) {
        return NSOrderedDescending; // the first type is preferred
    } else {
        return NSOrderedAscending; // the second type is preferred
    }   
}   

// later...

NSArray * sortedArray = [myGenericArray sortedArrayUsingFunction:customSort
                                                         context:NULL];

Если ваши типы не являются NSStrings, просто адаптируйте функцию по мере необходимости - вы можете заменить строки в массиве order вашими реальными объектами или (если ваши типы являются частью перечисления) сделать прямое сравнение и полностью исключить массив order.

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