У меня есть вид списка и вы хотите отсортировать массив так, чтобы каждое из имен находилось под правильным 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;
}
Это может быть полезно: http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom- objects-in-it – benuuu
Не можете поместить код здесь? – Shmidt
@Flink что вы имеете в виду? Код размещен выше. – Bot