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