2012-03-23 2 views
0

У меня есть вид списка и вы хотите отсортировать массив так, чтобы каждое из имен находилось под правильным 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"; 
    } 
) 

Partition

-(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

ANSWER КОД ИСПОЛЬЗУЕТСЯ:

-(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; 
} 
+0

Это может быть полезно: http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom- objects-in-it – benuuu

+0

Не можете поместить код здесь? – Shmidt

+0

@Flink что вы имеете в виду? Код размещен выше. – Bot

ответ

1

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

Хороший пример, который приводится здесь: https://stackoverflow.com/a/805589/580291

+0

Это сработало отлично. Я думал, что мне придется использовать его со сортировкой, но NOPE! Благодаря! – Bot

Смежные вопросы