Sort方法的扩展
OC中类方法中仅仅为我们提供了一些降序方法,如今我们自定义方法,实现升序.
1.要求:定义一个Person类,实例变量包含name,age,height,定义几个对象,把这些对象保存在数组中,自定义方法,实现数组按name,age,gheight的升序排列输出.
首先Person.h文件
#import <Foundation/Foundation.h>
@interface Person : NSObject{
NSString *_name;//姓名
NSInteger _age;//年龄
CGFloat _height;//身高
}
//初始化
- (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
//姓名
- (void)setName:(NSString *)name;
- (NSString *)name;
//年龄
- (void)setAge:(NSInteger)age;
- (NSInteger)age;
//身高
- (void)setHeight:(CGFloat)height;
- (CGFloat)height;
//比較age
- (NSComparisonResult)compareByAge:(Person *)anPerson;
//比較身高
- (NSComparisonResult)compareByHeight:(Person *)anPerson;
//比較名字升序
- (NSComparisonResult)compareByName:(Person *)anPerson;
//名字降序
- (NSComparisonResult)compareByNameDesceding:(Person *)anPerson;
Person.m文件
#import "Person.h" @implementation Person
#pragma mark - setter and getter //set姓名
- (void)setName:(NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
} //set年龄
- (void)setAge:(NSInteger)age{
_age = age;
}
- (NSInteger)age{
return _age;
} //set身高
- (void)setHeight:(CGFloat)height{
_height = height;
}
- (CGFloat)height{
return _height;
}
#pragma mark - init method
//初始化
- (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height{
self = [super init];
if (self != nil) {
_name = name;
_age = age;
_height = height;
}
return self;
}
#pragma mark - override method
//重写description
- (NSString *)description{
return [NSString stringWithFormat:@"name:%@ age:%ld, height:%g", _name, _age, _height];
}
#pragma mark - compare
//比較年龄age
- (NSComparisonResult)compareByAge:(Person *)anPerson{
if ([self age] > [anPerson age]) {
return NSOrderedDescending;//1 降序
}else if([self age] == [anPerson age]){ //相等
return NSOrderedSame;//0
}else{
return NSOrderedAscending;//-1 升序
}
}
//比較身高
- (NSComparisonResult)compareByHeight:(Person *)anPerson{
if ([self height] > [anPerson height]) {
return NSOrderedDescending;
}else if([self height] == [anPerson height]){
return NSOrderedSame;
}else{
return NSOrderedAscending;
}
}
//比較名字
- (NSComparisonResult)compareByName:(Person *)anPerson{
return [[self name] compare:[anPerson name]];
}
//名字降序
- (NSComparisonResult)compareByNameDesceding:(Person *)anPerson{
return -[[self name] compare:[anPerson name]];
}
@end
主函数中main.m调用
#import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[])
{ @autoreleasepool { Person *per1 = [[Person alloc] initWithName:@"xiaoshuai" age:12 height:178];
Person *per2 = [[Person alloc] initWithName:@"xiaomeng" age:22 height:175];
Person *per3 = [[Person alloc] initWithName:@"xiaoguangguang" age:20 height:180];
Person *per4 = [[Person alloc] initWithName:@"dapeng" age:30 height:190];
NSArray *perArr = [[NSArray alloc] initWithObjects:per1,per2,per3,per4, nil];
//对数组按姓名升序排序
NSArray *sortArrName = [perArr sortedArrayUsingSelector:@selector(compareByName:)];
NSLog(@"%@", sortArrName);
//对数组中年龄升序排序
NSArray *sortArrAge = [perArr sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@", sortArrAge);
//对数组中身高按升序排序
NSArray *sortArrHeight = [perArr sortedArrayUsingSelector:@selector(compareByHeight:)];
NSLog(@"%@", sortArrHeight);
//名字降序
NSArray *sortArrNameDescending = [perArr sortedArrayUsingSelector:@selector(compareByNameDesceding:)];
NSLog(@"%@", sortArrNameDescending); }
return 0;
}
測试结果:
2014-08-14 22:03:37.650 Lesson_Sort[4908:303] (
"name:dapeng age:30, height:190",
"name:xiaoguangguang age:20, height:180",
"name:xiaomeng age:22, height:175",
"name:xiaoshuai age:12, height:178"
)
2014-08-14 22:03:37.651 Lesson_Sort[4908:303] (
"name:xiaoshuai age:12, height:178",
"name:xiaoguangguang age:20, height:180",
"name:xiaomeng age:22, height:175",
"name:dapeng age:30, height:190"
)
2014-08-14 22:03:37.652 Lesson_Sort[4908:303] (
"name:xiaomeng age:22, height:175",
"name:xiaoshuai age:12, height:178",
"name:xiaoguangguang age:20, height:180",
"name:dapeng age:30, height:190"
)
2014-08-14 22:03:37.652 Lesson_Sort[4908:303] (
"name:xiaoshuai age:12, height:178",
"name:xiaomeng age:22, height:175",
"name:xiaoguangguang age:20, height:180",
"name:dapeng age:30, height:190"
)
Sort方法的扩展的更多相关文章
- ArrayList 排序Sort()方法扩展
1.sort() sort可以直接对默认继承 IComparable接口的类进行排序,如:int.string.... ArrayList arrayList = new ArrayList(); , ...
- Javascript Array对象 sort()方法,记忆方法,方法扩展
相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...
- Javascript中数组方法和方法的扩展
最近一直在努力的恶补javascript中的各种知识,比如说闭包,作用域,继承,构造函数,变量,内置对象等概念.同时,也在学习着ES6的新知识.最近想给大家分享的就是数组实例方法的练习以及如何去扩展一 ...
- JavaScript Array对象sort() 方法小结
sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...
- java.util.ComparableTimSort中的sort()方法简单分析
TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中能够有较好的性能. 该算法最初是由Tim Peters于2002年在Python语言中提出的. T ...
- jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法
$.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...
- 回调函数及数组中sort()方法实现排序的原理
1.回调函数:把一个方法A当一个参数值传递到另外一个函数B中,在B执行的过程当中我们随时根据需求让A方法执行: 什么是回调 :它是异步编程基本的方法,需要异步处理的时候一般采用后续传递的方式,将后 ...
- mongodb-$type、limit、skip、sort方法、索引、聚合
一.$type操作符 $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1 String 2 ...
随机推荐
- CImageList用法介绍
图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式.可以利用WINDOWS32位应用程序接口函数A ...
- disruptor流程
这里先不提那些编译器方面的优化.只看一下基于无锁环形队列的生产者消费者模型的工作流程.上一个图先: 当中,buffer是一个数组,用来模拟环形队列. slowest_reader记录最慢的reader ...
- Swift - 文件,文件夹操作大全
ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍历一个目录下的所有文件 1 ...
- 程序启动读取和关闭时保存应用程序设置(QSettings)
保存应用程序设置(QSettings)1. QSettings 类 QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等.在 Windo ...
- C语言中输入输出重定,freopen()妙用。
使用的理由(范围):如果输入数据很庞大,需要一次又一次的重新输入和调试时可采用本函数. freopen ()函数: 1.格式 FILE * freopen ( const char * filenam ...
- Delphi的指针 good
Pointers are like jumps, leading wildly from one part of the data structure to another. Their introd ...
- linux教程之一
相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 1. 忘记my ...
- SilkTest Q&A 5
Q41.VerifyBitmap的问题. 我正在使用函数VerifyBitmap比较位置,边,颜色等,例如: Window.VerifyBitmap("Position.bmp", ...
- Dom生成Xml和解析Xml
xml这样的文件格式在非常多时候都是非常适合我们用来存取数据的,所以利用程序来生成xml文件和解析xml文件就显得比較重要了.在dom中是把每个元素都看做是一个节点Node的,全部页面上的属性.元素等 ...
- Mybatis 3 返回布尔值,需要注意的地方
在Mybatis中,有时候需要返回布尔值 ,来确定某个记录行是否存在. 例如: <select id="isExistCode" parameterType="st ...