原文网址:http://blog.csdn.net/ministarler/article/details/17018839

c语言实现的学生成绩管理系统是面向过程的,而OC实现的学生成绩管理系统则是面向对象的.

对该系统的重难点讲述如下:

1.排序.系统中的四个关键字分别是 stuID,姓名,年龄,成绩.我们可以选择这四种方式并选择 升降序的方法进行排序.

系统中使用的是  NSmutableArray 存储数据.那么如何对对象是类成员的数组排序呢?

先看看NSMutableArray排序的几种方式.

1)使用@Seletor选择器调用方法排序.

[objc] view plaincopy print?
  1. NSMutableArray *array = [[NSMutableArray alloc]init];
  2. [array addObject:[NSNumber numberWithInt:10]];
  3. [array addObject:[NSNumber numberWithInt:20]];
  4. [array addObject:[NSNumber numberWithInt:0]];
  5. [array addObject:[NSNumber numberWithInt:1]];
  6. [array addObject:[NSNumber numberWithInt:3]];
  7. NSLog(@"未排序的数组:%@",array);
  8. NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(compare:)];
  9. NSLog(@"yi排序的数组:%@",sortedArray);
  10. /*
  11. 2013-11-29 08:28:00.616 OC实现学生成绩管理系统[451:303] 未排序的数组:(
  12. 10,
  13. 20,
  14. 0,
  15. 1,
  16. 3
  17. )
  18. 2013-11-29 08:28:00.621 OC实现学生成绩管理系统[451:303] yi排序的数组:(
  19. 0,
  20. 1,
  21. 3,
  22. 10,
  23. 20
  24. )
  25. */

同时也适用于类对象.

[objc] view plaincopy print?
  1. //直接实现静态方法,获取带有name和age的Person对象
  2. +(Person *)personWithAge:(int) age withName:(NSString *)name{
  3. Person *person = [[Person alloc] init];
  4. person.age = age;
  5. person.name = name;
  6. return person;
  7. }
  8. //自定义排序方法
  9. -(NSComparisonResult)comparePerson:(Person *)person{
  10. //默认按年龄排序
  11. NSComparisonResult result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]];//注意:基本数据类型要进行数据转换
  12. //如果年龄一样,就按照名字排序
  13. if (result == NSOrderedSame) {
  14. result = [self.name compare:person.name];
  15. }
  16. return result;
  17. }

2.高级排序,使用排序描述器:使用descriptor方法对Array中成员是类对象的类型进行按@propery 列进行排序.

[objc] view plaincopy print?
  1. -(void)SortStudentArray//
  2. {
  3. NSLog(@"按照学号排序请输入 (id)");
  4. NSLog(@"按姓名排序请输入(name)");
  5. NSLog(@"按照年龄排序请输入(age)");
  6. NSLog(@"按照成绩排序(score)请输入:");
  7. char charKey[10] ;
  8. scanf("%s",charKey);
  9. NSString *tempkey = [NSString stringWithUTF8String:charKey];
  10. NSString *key = [tempkey lowercaseString];
  11. BOOL ascending = NO;
  12. NSLog(@"是否开启降序模式( 默认不开启 )?(yes or no):");
  13. char ascendingStr[10] ;
  14. scanf("%s",ascendingStr);
  15. NSString *ascendingKey =[[NSString stringWithUTF8String:ascendingStr] lowercaseString];
  16. if ([ascendingKey isEqualToString:@"yes"])
  17. ascending = YES;
  18. else
  19. ascending = NO;
  20. if ([key isEqualToString:@"id"]) {
  21. NSSortDescriptor *sortByID = [NSSortDescriptor sortDescriptorWithKey:@"stuID" ascending:ascending];
  22. // 建立NSSortDescriptor 对象,按照的属性列,是否是asc升序?
[objc] view plaincopy print?
  1. [studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByID]];
  2. //按照建立的descriptor进行排序.
  3. }
  4. else if([key isEqualToString:@"name"])
  5. {
  6. NSSortDescriptor *sortByName= [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:ascending];
  7. [studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByName]];
  8. }
  9. else if([ key isEqualToString:@"age"])
  10. {
  11. NSSortDescriptor *sortByAge = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:ascending];
  12. [studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByAge]];
  13. }
  14. else if ([key isEqualToString:@"score"])
  15. {
  16. NSSortDescriptor *sortByScore = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:ascending];
  17. [studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByScore]];
  18. }
  19. }

上述代码就是我在管理系统中实现的,结果将在系统中呈现.

3.自定义重写方法进行排序.使用Block进行排序.

[objc] view plaincopy print?
  1. NSArray *array = [NSArray arrayWithObjects:@"1bc",@"4b6",@"123",@"789",@"3ef", nil nil];
  2. NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  3. //这里的代码可以参照上面compare:默认的排序方法,也可以把自定义的方法写在这里,给对象排序
  4. NSComparisonResult result = [obj1 compare:obj2];
  5. return result;
  6. }];
  7. NSLog(@"排序后:%@",sortedArray);

2013-11-29 08:42:56.723 OC实现学生成绩管理系统[483:303] 排序后:(

    123,

    1bc,

    3ef,

    4b6,

    789

)

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

  1. 提升用户体验,你不得不知道的事儿——三种提醒框的微技巧

    大家都知道无论是android开发还是其他的开发,用户的体验都是很重要的事儿,下面就android开发中的三种提醒方式,Toast,SnackBar,Dialog做一些细节上的处理,或许能让你的产品更 ...

  2. OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法

    一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化 ...

  3. 5 OC 中的三种对象

    目录 OC 中对象的分类 一  instance 对象 二 类对象 三  元类对象 总结: OC 中对象的分类 instance 对象 类对象 元类对象 一  instance 对象 内存中包含哪些信 ...

  4. NSMutableArray 排序

    NSMutableArray *array1=[NSMutableArray arrayWithObjects:@"1",@"3",@"2" ...

  5. oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍

    一.类方法的使用 /*像我们之前学的方法,必须先实例化这个类的对象才能调用这个方法,类方法不用实例化对象,直接调用这个方法.之前学的方法调用的语法:[对象名 方法名]; //对象方法类方法:[类名 方 ...

  6. 【连载】【FPGA黑金开发板】NIOS II那些事儿--编程风格(三)

    声明:本文为XiaomaGee编写,版权由XiaomaCee和本博文作者所有,如需转载请标明出处http://www.cnblogs.com/kingst 一. 规范参照标准 良好的代码风格及编程规范 ...

  7. 排序的几种方法 oc

    NSArray *arr = @[ @"234", @"123", @"235", @"133" ]; NSArray  ...

  8. 简单阐述下OC中UIImage三种创建方式~~~

    一. 直接使用imageNamed进行创建 1 UIImage * image = [UIImage imageNamed:@"1.jpg"]; 简单说一下这种方式的优缺点: 优点 ...

  9. Foundation 框架 NSArray、NSMutableArray排序

    一.使用selector对数组进行排序(无返回) 数组 book 中包含 AddressCard对象. 1.对数组调用 sortUsingSelector方法 1 -(void) sortByName ...

最新文章

  1. PHP 设计模式 笔记与总结(9)数据对象映射模式
  2. 超前探秘首个国产元宇宙百度“希壤”:率先实现10万人同屏互动
  3. LTSM 实现多元素时序数据植物健康预测
  4. 098~100:ORM迁移
  5. 1411区间内的真素数2
  6. php中ip授权系统,PHP授权验证系统(域名+IP双重验证一键更新授权系统)
  7. 数据结构-----基于双数组的Trie树
  8. 【原创】分布式之大话CAP
  9. 报告 | 斯坦福2019 AI年度报告出炉!700亿美元投入AI,自动驾驶融资最多
  10. 获取aplicationContext对象,从而获取任何注入的对象
  11. Win8Metro(C#)数字图像处理--2.7图像伪彩色
  12. 离散数学计算机专业论文,【计算机专业《离散数学》教学研究】计算机专业离散数学...
  13. 2011 年上半年软考5 月 信息系统项目管理师上午试题参考答案
  14. IDC将中国城市分成六级:每一级具体的城市是那几个市,谢谢回复
  15. c语言猜拳游戏教案,幼儿园中班游戏《猜拳游戏》的教案
  16. ScheduledExecutorService 实现定时任务及取消任务
  17. 土星游戏精灵王2游戏反向工程日志(1)
  18. 计算机无法超过人类智慧,计算机的智力会超过人类吗?
  19. SSM框架优缺点和springboot 比起优缺点是什么?
  20. 怎么确保数据在网络传输的安全性?

热门文章

  1. Go goroutine理解
  2. SQL老司机,在SQL中计算 array map json数据
  3. mac下java配置填坑
  4. 《大话操作系统——做坚实的project实践派》(3)
  5. C语言 · 约数个数
  6. ZZULIOJ 1918: G 【二分图匹配】
  7. Blog博客系统数据库设计
  8. Android 国际化问题
  9. ROS教程(3)---静态NAT配置及应用 (
  10. WINXP光启工具盘的制作(4)-acrosin true image