原文網(wǎng)址:http://blog.csdn.net/ministarler/article/details/17018839
c語言實現(xiàn)的學生成績管理系統(tǒng)是面向過程的,而OC實現(xiàn)的學生成績管理系統(tǒng)則是面向?qū)ο蟮?
對該系統(tǒng)的重難點講述如下:
1.排序.系統(tǒng)中的四個關鍵字分別是 stuID,姓名,年齡,成績.我們可以選擇這四種方式并選擇 升降序的方法進行排序.
系統(tǒng)中使用的是 ?NSmutableArray 存儲數(shù)據(jù).那么如何對對象是類成員的數(shù)組排序呢?
先看看NSMutableArray排序的幾種方式.
1)使用@Seletor選擇器調(diào)用方法排序.
?
[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(@"未排序的數(shù)組:%@",array);????????????NSArray?*sortedArray?=?[array?sortedArrayUsingSelector:@selector(compare:)];???????NSLog(@"yi排序的數(shù)組:%@",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]];??????????????}??????}?? 上述代碼就是我在管理系統(tǒng)中實現(xiàn)的,結(jié)果將在系統(tǒng)中呈現(xiàn).
?
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實現(xiàn)學生成績管理系統(tǒng)[483:303]?排序后:(
? ? 123,
? ? 1bc,
? ? 3ef,
? ? 4b6,
? ? 789
)
總結(jié)
以上是生活随笔為你收集整理的【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。