我有一个列表视图,想要对数组进行排序,以便每个名称都在正确的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;
}