OC 数组排序方法论
来源:互联网 发布:多张表格数据汇总透视 编辑:程序博客网 时间:2024/04/30 19:57
OC对数组排序有很多种方法
首先声明一个Person类并重写父类的description方法 不会的同学请参照我的博客:
OC的开始(一)之----HelloWord与类的创建及使用
这里说一下重写的父类description方法:当我们不重写这个方法的时候,直接打印出得结果是对象,看代码:
// 声明多个Person对象 Person *p1 = [Person personWithName:@"zhangsan" number:10001 age:26 score:90.5]; Person *p2 = [Person personWithName:@"lisi" number:10002 age:22 score:91.5]; Person *p3 = [Person personWithName:@"wangwu" number:10004 age:24 score:90.5]; Person *p4 = [Person personWithName:@"zhaoliu" number:10003 age:25 score:92.5]; Person *p5 = [Person personWithName:@"xiaoqi" number:10008 age:26 score:96.5]; Person *p6 = [Person personWithName:@"bazai" number:10006 age:27 score:93.5]; Person *p7 = [Person personWithName:@"xiaojiu" number:10005 age:21 score:92.5]; Person *p8 = [Person personWithName:@"shidi" number:10007 age:18 score:99.5]; // 声明一个不可变数组 NSArray *persons = [NSArray arrayWithObjects:p1, p2, p3, p4, p5, p6, p7, p8, nil]; NSLog(@"%@", persons);
2015-05-22 15:31:47.320 Test02[1653:116214] ( "<Person: 0x100200f80>", "<Person: 0x100201270>", "<Person: 0x1002012e0>", "<Person: 0x100201350>", "<Person: 0x1002013c0>", "<Person: 0x100201430>", "<Person: 0x1002014a0>", "<Person: 0x100201510>")这样执行的的显示结果是每一个元素对象在堆内存中站得地址,那么我们看看把description重写后再次打印的结果:
在Person.m文件中重写description方法
- (NSString *)description{ return [NSString stringWithFormat:@"name = %@ number = %ld age = %ld score = %.2f", _name, _number, _age, _score];}
然后打印结果:
2015-05-22 15:35:00.174 Test02[1669:117516] ( "name = zhangsan number = 10001 age = 26 score = 90.50", "name = lisi number = 10002 age = 22 score = 91.50", "name = wangwu number = 10004 age = 24 score = 90.50", "name = zhaoliu number = 10003 age = 25 score = 92.50", "name = xiaoqi number = 10008 age = 26 score = 96.50", "name = bazai number = 10006 age = 27 score = 93.50", "name = xiaojiu number = 10005 age = 21 score = 92.50", "name = shidi number = 10007 age = 18 score = 99.50")
很明显,当我们直接打印数组的时候,系统调用了父类的description方法。
现在开始我们的排序之旅:
一、使用冒泡排序:
// 定义一个可变数组,将persons的值赋给可变数组 NSMutableArray *muPersons = [NSMutableArray arrayWithArray:persons]; // 使用冒泡按照number进行升序排序 for (int i = 0; i < muPersons.count - 1; i++) { for (int j = 0; j < muPersons.count - 1 - i; j++) { // 前一个元素的number属性大于后一个元素的number属性时 两个元素交换位置 if ([muPersons[j] number] > [muPersons[j + 1] number]) { [muPersons exchangeObjectAtIndex:j withObjectAtIndex:j + 1]; } } } NSLog(@"%@", muPersons);查看结果:
2015-05-22 15:50:26.322 Test02[1719:122150] ( "name = zhangsan number = 10001 age = 26 score = 90.50", "name = lisi number = 10002 age = 22 score = 91.50", "name = zhaoliu number = 10003 age = 25 score = 92.50", "name = wangwu number = 10004 age = 24 score = 90.50", "name = xiaojiu number = 10005 age = 21 score = 92.50", "name = bazai number = 10006 age = 27 score = 93.50", "name = shidi number = 10007 age = 18 score = 99.50", "name = xiaoqi number = 10008 age = 26 score = 96.50")二、使用sortedArrayUsingSelector排序:
使用sortedArrayUsingSelector之前,需要我们在person中写专门写一个排序的方法供sortedArrayUsingSelector使用。
在person.h文件中自定义排序方法compareSortNumber:
// 自定义排序方法- (NSComparisonResult)compareSortNumber:(Person *)person;在person.m文件中实现排序:
// 自定义排序方法- (NSComparisonResult)compareSortNumber:(Person *)person{ if ([self number] > [person number]) { return NSOrderedDescending; } return NSOrderedSame;}在main.m文件中调用sortedArrayUsingSelector对number进行升序排列
// 使用sortedArrayUsingSelector对number进行升序排列 NSArray *selArray = [persons sortedArrayUsingSelector:@selector(compareSortNumber:)]; NSLog(@"%@", selArray);运行结果:
2015-05-22 16:33:49.996 Test02[1927:136447] ( "name = zhangsan number = 10001 age = 26 score = 90.50", "name = lisi number = 10002 age = 22 score = 91.50", "name = zhaoliu number = 10003 age = 25 score = 92.50", "name = wangwu number = 10004 age = 24 score = 90.50", "name = xiaojiu number = 10005 age = 21 score = 92.50", "name = bazai number = 10006 age = 27 score = 93.50", "name = shidi number = 10007 age = 18 score = 99.50", "name = xiaoqi number = 10008 age = 26 score = 96.50")三、使用sortedArrayUsingComparator对number进行升序排列
// 使用sortedArrayUsingComparator对number进行升序排列 NSArray *comArray = [persons sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { Person *p1 = obj1; Person *p2 = obj2; if ([p1 number] > [p2 number]) { return NSOrderedDescending; } return NSOrderedSame; }]; NSLog(@"%@", comArray);运行结果:
2015-05-22 17:02:44.189 Test02[2039:148253] ( "name = zhangsan number = 10001 age = 26 score = 90.50", "name = lisi number = 10002 age = 22 score = 91.50", "name = zhaoliu number = 10003 age = 25 score = 92.50", "name = wangwu number = 10004 age = 24 score = 90.50", "name = xiaojiu number = 10005 age = 21 score = 92.50", "name = bazai number = 10006 age = 27 score = 93.50", "name = shidi number = 10007 age = 18 score = 99.50", "name = xiaoqi number = 10008 age = 26 score = 96.50")总结:
使用冒泡排序的时候 我们需要重新定义可变数组对数组中的元素进行排序,sortedArrayUsingSelector排序我们需要写单独写一个方法给sortedArrayUsingSelector调用,太麻烦了,最后一种方法是OC中最常用的排序方法。
1 0
- OC 数组排序方法论
- oc数组排序
- oc对数组排序
- OC 数组的排序
- OC数组冒泡排序
- OC数组排序
- OC基础----数组排序(OC)
- oc中数组排序方法
- OC数组的冒泡排序
- oc中对象数组排序
- OC不可变数组排序方法
- OC之字典、集、数组排序
- oc中数组的排序方法总结
- OC数组排序的基本方法
- OC中常用的数组排序
- IOS开发- OC 中数组排序
- oc数组排序 及转换关系
- OC第五天-字典,集合,数组排序
- 第三章,课外作业(C++,数字高精度之加法)
- SGU109 Magic of David Copperfield II
- JavaScript建立HTML
- java 反射 模拟spring自动注入
- 指定的网络名不再可用
- OC 数组排序方法论
- JAVA设计模式:观察者模式
- Java Servlet PDF文件生成
- [C/C++]_[初级]_[标准字符串std::string 所有函数的用法总结]
- 【原创】ppp拨号上网总结
- Qt4.8.5 配置mysql驱动
- 重载流插入运算符和流提取运算符
- jnlp——通过浏览器直接执行java应用程序
- [150522]Linux常用系统命令