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方法的扩展的更多相关文章

  1. ArrayList 排序Sort()方法扩展

    1.sort() sort可以直接对默认继承 IComparable接口的类进行排序,如:int.string.... ArrayList arrayList = new ArrayList(); , ...

  2. Javascript Array对象 sort()方法,记忆方法,方法扩展

    相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...

  3. Javascript中数组方法和方法的扩展

    最近一直在努力的恶补javascript中的各种知识,比如说闭包,作用域,继承,构造函数,变量,内置对象等概念.同时,也在学习着ES6的新知识.最近想给大家分享的就是数组实例方法的练习以及如何去扩展一 ...

  4. JavaScript Array对象sort() 方法小结

    sort() 方法用于对数组的元素进行排序. 语法arrayObject.sort(sortfunction) 参数sortfunction 可选.规定排序顺序.必须是函数. 返回值对数组的引用.请注 ...

  5. java.util.ComparableTimSort中的sort()方法简单分析

    TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中能够有较好的性能. 该算法最初是由Tim Peters于2002年在Python语言中提出的. T ...

  6. jQuery中的$.extend方法来扩展JSON对象及合并,方便调用对象方法

    $.extend方法可以扩展JSON对象,用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 例一 合并 settings 和 options,修改并返回 settings var setting ...

  7. .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

    开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...

  8. 回调函数及数组中sort()方法实现排序的原理

    1.回调函数:把一个方法A当一个参数值传递到另外一个函数B中,在B执行的过程当中我们随时根据需求让A方法执行:   什么是回调 :它是异步编程基本的方法,需要异步处理的时候一般采用后续传递的方式,将后 ...

  9. mongodb-$type、limit、skip、sort方法、索引、聚合

    一.$type操作符 $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1   String 2 ...

随机推荐

  1. 【Demo 0007】Java基础-类扩展特性

    本章学习要点:        1.  掌握static 修饰的类,方法以及变量的功能及用法;        2.  掌握代码块(静态,非静态)的作用以及注意事项:        3.  了解基本数据类 ...

  2. jquery实现鼠标焦点十字效果

    系统开发时很多地方需要有焦点效果,例如:鼠标点击聚焦,地图定位,在图片上突出显示,焦点定位页面元素. 本小功能通过jquery和graphics二次开发,实现通过鼠标点击页面任何区域,聚焦当前点击位置 ...

  3. 四张类图理一下Streams的用法

    首先是输出流 OutputStream.继承它的类有两种,一种是底层实现(纯继承OutputStream的类),一种是格式转换(组合了OutputStream的类). 所谓的底层实现,就是真正和物理存 ...

  4. jfinal常见问题

    2014年的时候,学过一段时间的JFinal,当时主要是了解这个框架,研究了下源码,看懂了部分.今天,2015年2月7日,弄了一下午的JFinal,把未来要上线的一个官网项目,迁移到了JFinal.下 ...

  5. Swift - 分段选择控件(UISegmentedControl)的用法

    1,选择控件的创建,并监听控件选择值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class ViewController: UIVie ...

  6. Qt多线程(有详细例子)

    Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了开始一个新线程的方法QThreadStorage 提供逐线程数据存储QMutex  提供相互排斥的锁,或互斥量QMutexLocker ...

  7. 浅谈Base64编码

    浅谈Base64编码 我打赌当你见到Base64这个词的时候你会觉得在哪里见过,因为在你能够上网看到这篇文章的时候你已经在后台使用它了.如果您对二进制数有所了解,你就可以开始读它了. 打开一封Emai ...

  8. 高效 Java Web 开发框架 JessMA v3.2.3 beta-1 发布

    JessMA(原名:Portal-Basic)是一套功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hib ...

  9. ANTS Performance Profiler 破解使用

    http://blog.csdn.net/wangjia184/article/details/7746089

  10. 关于PHP的内置服务器的使用

    今天刚开始正式学习PHP(之前有一点了解),推荐学习的网站是w3school.一开始不知道tomcat服务器不支持PHP脚本,直接把.php文件放到tomcat里面去运行,结果嵌入的php代码段没有什 ...