Сортировка массива пользовательских объектов по словарю, включенному в пользовательский объект:Каким образом?

StackOverflow https://stackoverflow.com/questions/1851182

Вопрос

У меня есть массив пользовательских объектов.Объекты включают в себя словарь.Что- то вроде этого:

CustomDataModel *dataModel;

dataModel.NSString
dataModel.NSDictionary
dataModel.image

Я бы хотел выполнить сортировку по одному из объектов в словаре:

dataModel.NSDictionary ObjectWithkey=@"Name"

Модель данных загружается в NSArray.Теперь я хочу отсортировать по клавише @"Name" в словаре.Это то, с чем может справиться NSSortDescriptor?Базовая сортировка работает нормально, просто с этой я еще не разобрался...

Это было полезно?

Решение

Ваш вопрос мне не совсем понятен, но вы можете попробовать что-то подобное в вашем NSArray:

- (NSArray *)sortedItems:(NSArray*)items;
{
    NSSortDescriptor *sortNameDescriptor = 
                        [[[NSSortDescriptor alloc] 
                          initWithKey:@"Name" ascending:NO] 
                          autorelease];

    NSArray *sortDescriptors = 
                        [[[NSArray alloc] 
                          initWithObjects:sortNameDescriptor, nil] 
                          autorelease];

    return [items sortedArrayUsingDescriptors:sortDescriptors];
}

Другие советы

//Sort an array which holds different dictionries - STRING BASED   - Declare it in the .h
    - (NSArray *)sortStringsBasedOnTheGivenField:(id)dictionaryKey arrayToSort:(NSMutableArray *)arrayToHoldTemp ascending:(BOOL)ascending {
        NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:dictionaryKey ascending:ascending selector:@selector(localizedCaseInsensitiveCompare:)] ;
        NSArray *descriptors = [NSArray arrayWithObject:nameDescriptor];
        [arrayToHoldTemp sortUsingDescriptors:descriptors];
        [nameDescriptor release];
        return arrayToHoldTemp;
    }

Использование:

self.mainArrayForData = [NSArray arrayWithArray:[self sortNumbersBasedOnTheGivenField:@"Name" arrayToSort:arrayWhichContainsYourDictionries ascending:YES]];

описанный выше метод хорош для массива, содержащего словари

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top