【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).
原文网址:http://blog.csdn.net/ministarler/article/details/17018839
c语言实现的学生成绩管理系统是面向过程的,而OC实现的学生成绩管理系统则是面向对象的.
对该系统的重难点讲述如下:
1.排序.系统中的四个关键字分别是 stuID,姓名,年龄,成绩.我们可以选择这四种方式并选择 升降序的方法进行排序.
系统中使用的是 NSmutableArray 存储数据.那么如何对对象是类成员的数组排序呢?
先看看NSMutableArray排序的几种方式.
1)使用@Seletor选择器调用方法排序.
- 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
- )
- */
同时也适用于类对象.
- //直接实现静态方法,获取带有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 列进行排序.
- -(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升序?
- [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进行排序.
- 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排序的三种实现(依赖学生成绩管理系统).的更多相关文章
- OC知识梳理-NSArray与NSMutableArray相关知识
知识普及: 1.数组中的元素在系统中都会有其默认对应的下标,下标是一个整形的数字,默认从0开始. 例:NSArray *arr3 = @["345","234" ...
- 黑马程序员——OC基础 三种特性之封装
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三种特性之一封装 (一)set方法和get方法 1) set方法 1&g ...
- OC和JS交互的三种方法
看简书上说一共有六种OC和JS交互的方法,但是前三种原理都一致,都是通过检测.拦截Url地址实现互相调用的.剩下的react native等第三方框架原理不一样,也没有去研究,下边记录我使用的三种方法 ...
- OC与Swift混编,三种场景的实现方式
多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OC和Swift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File 选择 Heade ...
- OC第三节——NSArray和NSMutableArray
1.OC数组和c数组的区别 C语言的数组: 相同类型变量的有序结合. 类型:可以是简答数据类型.构造数据类型 int a[10 ...
- NSArray,NSMutableArray的三种排序
int main(int argc, const char * argv[]) { @autoreleasepool { //字符串进行排序 NSArray *arr=@[@"b" ...
- 利用 NSSortDescriptor 对 NSMutableArray 排序
有时我们在NSMutableArray中存的是网络请求返回的数据,而每一个元素又是一个NSDictionary,如果这时候需要把数组中的元素按照每个元素字典中某一个key来排序,那么我们可以利用Obj ...
- NSMutableArray 排序
NSMutableArray *array1=[NSMutableArray arrayWithObjects:@"1",@"3",@"2" ...
- oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
一.类方法的使用 /* 像我们之前学的方法,必须先实例化这个类的对象才能调用这个方法,类方法不用实例化对象,直接调用这个方法. 之前学的方法调用的语法: [对象名 方法名]; //对象方法 类方法: ...
随机推荐
- ExtJs布局之BOX
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- ABP集合帖
http://www.cnblogs.com/kebinet/p/5341663.html http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent ...
- Gradle Goodness: Continue Build Even with Failed Tasks
If we run a Gradle build and one of the tasks fails, the whole build stops immediately. So we have f ...
- 李洪强iOS开发之OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- 273. Integer to English Words
题目: Convert a non-negative integer to its english words representation. Given input is guaranteed to ...
- Centos下修改启动项和网络配置
1.Centos默认是从图形界面启动,需要较多的资源,为了节省资源可以从命令行启动.修改方法如下: /etc/inittab文件,把 代码: id:5:initdefault:这一行,修改成 代码: ...
- Data Flow ->> Raw File Source & Raw File Destination
Raw File Source & Raw File Destination一般用在当有某个package在导入数据或者处理数据需要花费非常长的时间的情况下,可以通过把一些处理好的数据先存到r ...
- Node 实现 AES 加密,结果输出为“byte”。
Node 实现 AES 加密,结果输出为"byte". 最近做个需求,对接一个平台的接口,该平台采用 AES (Advanced Encryption Standard)加密算法, ...
- YTU 2615: AB编程题--世界杯小组赛
2615: AB编程题--世界杯小组赛 时间限制: 1 Sec 内存限制: 128 MB 提交: 100 解决: 35 题目描述 注:本题目自由设计,但必须使用类进行代码设计. 世界杯32支参赛队 ...
- html5 audio音频播放全解析
序 html5开启了一个新时代,因为它让浏览器本身变得不那么被动,audio api就是一个典型的列子,在html5还没确定之前,如果想要在网页上听音乐看视频唯一的办法就是用flash意思是当你没有给 ...