Сортировка сортировки с объектом - PullRequest
0 голосов
/ 23 марта 2012

У меня есть представление списка и я хочу отсортировать массив так, чтобы каждое из имен находилось в правильном разделе UILocalizedIndexCollation.Вот фрагмент передаваемого раздела. Я хочу отсортировать через name, однако я также хочу сохранить объект в целости, чтобы я мог использовать другие данные.

2012-03-23 12:10:14.083 MyApp[61241:14803] Section: (
        {
        "c_id" = 261;
        "customer_id" = 178664;
        "first_name" = My;
        "last_name" = Test;
        name = "Test, My";
    },
        {
        "c_id" = 261;
        "customer_id" = 185182;
        "first_name" = valid;
        "last_name" = Test;
        name = "Test, valid";
    },
        {
        "c_id" = 261;
        "customer_id" = 178729;
        "first_name" = Test;
        "last_name" = Three;
        name = "Three, Test";
    },
        {
        "c_id" = 261;
        "customer_id" = 178727;
        "first_name" = Test;
        "last_name" = Two;
        name = "Two, Test";
    },
        {
        "c_id" = 261;
        "customer_id" = 178728;
        "first_name" = Test;
        "last_name" = Two;
        name = "Two, Test";
    }
)

Раздел

-(NSArray *)partitionObjects:(NSArray *)array collationStringSelector:(SEL)selector
{
    UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
    NSInteger sectionCount = [[collation sectionTitles] count];
    NSMutableArray *unsortedSections = [NSMutableArray arrayWithCapacity:sectionCount];

    for (int i = 0; i < sectionCount; i++) {
        [unsortedSections addObject:[NSMutableArray array]];
    }

    for (id object in array) {
        NSInteger index = [collation sectionForObject:[object objectForKey:@"name"] collationStringSelector:selector];
        [[unsortedSections objectAtIndex:index] addObject:object];
    }

    NSMutableArray *sections = [NSMutableArray arrayWithCapacity:sectionCount];

    for (NSMutableArray *section in unsortedSections) {
        [sections addObject:[collation sortedArrayFromArray:section collationStringSelector:selector]];
    }

    return sections;
}

Вызов раздела

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        NSMutableArray *tempCustomers = [[NSMutableArray alloc] init];
        NSString *name;
        for (NSDictionary *dict in [json objectForKey:@"data"]) {
            name = [NSString stringWithFormat:@"%@, %@",[dict objectForKey:@"last_name"],[dict objectForKey:@"first_name"]];
            NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithDictionary:dict];
            [tempDict setValue:name forKey:@"name"];
            [tempCustomers addObject:tempDict];

        }

        self.customers = tempCustomers;
        self.customerData = [self partitionObjects:[self customers] collationStringSelector:@selector(self)];

Мне нужно сохранить объект без изменений, но отсортировать по имени и поместить каждый из объектов в соответствующие разделы с помощью UILocalizedIndexCollation

ИСПОЛЬЗОВАННЫЙ КОД ОТВЕТА:

-(NSArray *)partitionObjects:(NSArray *)array collationStringSelector:(SEL)selector
{
    UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
    NSInteger sectionCount = [[collation sectionTitles] count];
    NSMutableArray *unsortedSections = [NSMutableArray arrayWithCapacity:sectionCount];

    for (int i = 0; i < sectionCount; i++) {
        [unsortedSections addObject:[NSMutableArray array]];
    }

    for (id object in array) {
        NSInteger index = [collation sectionForObject:[object objectForKey:@"name"] collationStringSelector:selector];
        [[unsortedSections objectAtIndex:index] addObject:object];
    }

    NSMutableArray *sections = [NSMutableArray arrayWithCapacity:sectionCount];
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];


    for (NSMutableArray *section in unsortedSections) {
        NSArray *sortedArray = [section sortedArrayUsingDescriptors:sortDescriptors];
        collationStringSelector:selector]];
        [sections addObject:sortedArray];
    }

    return sections;
}

1 Ответ

1 голос
/ 24 марта 2012

Вы должны быть в состоянии сделать это с помощью метода сравнения.

Хороший пример этого представлен здесь: https://stackoverflow.com/a/805589/580291

...