欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

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

发布时间:2025/7/14 windows 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【转】 [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排序的三种实现(依赖学生成绩管理系统).的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。