原文网址:http://blog.csdn.net/ministarler/article/details/17018839
c语言实现的学生成绩管理系统是面向过程的,而OC实现的学生成绩管理系统则是面向对象的.
对该系统的重难点讲述如下:
1.排序.系统中的四个关键字分别是 stuID,姓名,年龄,成绩.我们可以选择这四种方式并选择 升降序的方法进行排序.
系统中使用的是 NSmutableArray 存储数据.那么如何对对象是类成员的数组排序呢?
先看看NSMutableArray排序的几种方式.
1)使用@Seletor选择器调用方法排序.
[objc] view plaincopy print?
NSMutableArray *array = [[NSMutableArray alloc]init]; [array addObject:[NSNumber numberWithInt:10]]; [array addObject:[NSNumber numberWithInt:20]]; [array addObject:[NSNumber numberWithInt:0]]; [array addObject:[NSNumber numberWithInt:1]]; [array addObject:[NSNumber numberWithInt:3]]; NSLog(@"未排序的数组:%@",array); NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"yi排序的数组:%@",sortedArray);
同时也适用于类对象.
[objc] view plaincopy print?
+(Person *)personWithAge:(int) age withName:(NSString *)name{ Person *person = [[Person alloc] init]; person.age = age; person.name = name; return person; } -(NSComparisonResult)comparePerson:(Person *)person{ NSComparisonResult result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]]; if (result == NSOrderedSame) { result = [self.name compare:person.name]; } return result; }
2.高级排序,使用排序描述器:使用descriptor方法对Array中成员是类对象的类型进行按@propery 列进行排序.
[objc] view plaincopy print?
-(void)SortStudentArray{ NSLog(@"按照学号排序请输入 (id)"); NSLog(@"按姓名排序请输入(name)"); NSLog(@"按照年龄排序请输入(age)"); NSLog(@"按照成绩排序(score)请输入:"); char charKey[10] ; scanf("%s",charKey); NSString *tempkey = [NSString stringWithUTF8String:charKey]; NSString *key = [tempkey lowercaseString]; BOOL ascending = NO; NSLog(@"是否开启降序模式( 默认不开启 )?(yes or no):"); char ascendingStr[10] ; scanf("%s",ascendingStr); NSString *ascendingKey =[[NSString stringWithUTF8String:ascendingStr] lowercaseString]; if ([ascendingKey isEqualToString:@"yes"]) ascending = YES; else ascending = NO; if ([key isEqualToString:@"id"]) { NSSortDescriptor *sortByID = [NSSortDescriptor sortDescriptorWithKey:@"stuID" ascending:ascending]; [objc] view plaincopy print?
[studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByID]]; } else if([key isEqualToString:@"name"]) { NSSortDescriptor *sortByName= [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:ascending]; [studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByName]]; } else if([ key isEqualToString:@"age"]) { NSSortDescriptor *sortByAge = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:ascending]; [studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByAge]]; } else if ([key isEqualToString:@"score"]) { NSSortDescriptor *sortByScore = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:ascending]; [studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByScore]]; } } 上述代码就是我在管理系统中实现的,结果将在系统中呈现.
3.自定义重写方法进行排序.使用Block进行排序.
[objc] view plaincopy print?
NSArray *array = [NSArray arrayWithObjects:@"1bc",@"4b6",@"123",@"789",@"3ef", nil nil]; NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSComparisonResult result = [obj1 compare:obj2]; return result; }]; NSLog(@"排序后:%@",sortedArray);
2013-11-29 08:42:56.723 OC实现学生成绩管理系统[483:303] 排序后:(
123,
1bc,
3ef,
4b6,
789
)
总结
以上是生活随笔为你收集整理的【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。