日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).

發(fā)布時間:2025/7/14 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统). 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文網(wǎng)址:http://blog.csdn.net/ministarler/article/details/17018839

c語言實現(xiàn)的學生成績管理系統(tǒng)是面向過程的,而OC實現(xiàn)的學生成績管理系統(tǒng)則是面向對象的.

對該系統(tǒng)的重難點講述如下:

1.排序.系統(tǒng)中的四個關鍵字分別是 stuID,姓名,年齡,成績.我們可以選擇這四種方式并選擇 升降序的方法進行排序.

系統(tǒng)中使用的是 ?NSmutableArray 存儲數(shù)據(jù).那么如何對對象是類成員的數(shù)組排序呢?

先看看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(@"未排序的數(shù)組:%@",array);??
  • ??????
  • ????NSArray?*sortedArray?=?[array?sortedArrayUsingSelector:@selector(compare:)];??
  • ?????NSLog(@"yi排序的數(shù)組:%@",sortedArray);??
  • ????/*?
  • ?????2013-11-29?08:28:00.616?OC實現(xiàn)學生成績管理系統(tǒng)[451:303]?未排序的數(shù)組:(?
  • ?????10,?
  • ?????20,?
  • ?????0,?
  • ?????1,?
  • ?????3?
  • ?????)?
  • ?????2013-11-29?08:28:00.621?OC實現(xiàn)學生成績管理系統(tǒng)[451:303]?yi排序的數(shù)組:(?
  • ?????0,?
  • ?????1,?
  • ?????3,?
  • ?????10,?
  • ?????20?
  • ?????)?
  • ?????*/??
  • ?

    ?

    同時也適用于類對象.

    ?

    [objc]?view plaincopy print?
  • //直接實現(xiàn)靜態(tài)方法,獲取帶有name和age的Person對象??
  • +(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]];//注意:基本數(shù)據(jù)類型要進行數(shù)據(jù)轉換??
  • ??//如果年齡一樣,就按照名字排序??
  • ????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];??
  • ???????//?建立NSSortDescriptor?對象,按照的屬性列,是否是asc升序???
  • [objc]?view plaincopy print?
  • ????????[studentArray?sortUsingDescriptors:[NSArray?arrayWithObject:sortByID]];??
  • ????????//按照建立的descriptor進行排序.??
  • ????}??
  • ????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)的,結果將在系統(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)?{??
  • ?????????????
  • ???????????//這里的代碼可以參照上面compare:默認的排序方法,也可以把自定義的方法寫在這里,給對象排序??
  • ???????????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

    )

    總結

    以上是生活随笔為你收集整理的【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。