日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

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

原文網址: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);??
  • ????/*?
  • ?????2013-11-29?08:28:00.616?OC實現學生成績管理系統[451:303]?未排序的數組:(?
  • ?????10,?
  • ?????20,?
  • ?????0,?
  • ?????1,?
  • ?????3?
  • ?????)?
  • ?????2013-11-29?08:28:00.621?OC實現學生成績管理系統[451:303]?yi排序的數組:(?
  • ?????0,?
  • ?????1,?
  • ?????3,?
  • ?????10,?
  • ?????20?
  • ?????)?
  • ?????*/??
  • ?

    ?

    同時也適用于類對象.

    ?

    [objc]?view plaincopy print?
  • //直接實現靜態方法,獲取帶有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]];//注意:基本數據類型要進行數據轉換??
  • ??//如果年齡一樣,就按照名字排序??
  • ????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]];??
  • ??
  • ??????
  • ????}??
  • ??
  • ??
  • }??
  • 上述代碼就是我在管理系統中實現的,結果將在系統中呈現.

    ?

    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實現學生成績管理系統[483:303]?排序后:(

    ? ? 123,

    ? ? 1bc,

    ? ? 3ef,

    ? ? 4b6,

    ? ? 789

    )

    總結

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

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