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. 14.1.3 Turning Off InnoDB 关掉InnoDB

    14.1.3 Turning Off InnoDB 关掉InnoDB: Oracle 推荐InnoDB 作为首选的存储引擎用于典型的数据库应用,从单用户的wikis到博客, 到高端应用把性能推到极限. ...

  2. Delphi 10.1 柏林更新内容简译

    新的 SDKTransform.exe 支持转换 Object-C 或 C++ 头文件到Delphi. 修改了对话框的接口,分成了同步和异步两种: http://blog.qdac.cc/?p=380 ...

  3. 积累的VC编程小技巧之列表框

    1.列表框中标题栏(Column)的添加 创建一个List Control,其ID为IDC_LIST,在其Styles属性项下的View项里选择Report.Align项里选择Top.Sort项里选择 ...

  4. uploadfiy使用

    动态加参数:$("#file_upload").uploadify("settings", "formData", { knowledgeI ...

  5. 自己定义android 4.0以上的对话框风格

    做个笔记.这里是Dialog的风格,假设是用AlertDialog创建的,不能直接用.在styles.xml的写法: <style name="DialogWindowTitle&qu ...

  6. ZenCoding Syntax

    语法: 后代:> 缩写:nav>ul>li 兄弟:+ 缩写:div+p+bq 上级:^ 缩写:div+div>p>span+em^bq 缩写:div+div>p&g ...

  7. css js 优化工具

    我知道国内很多网页制作人员都还在制作table式网页,这样的网页打开速度很慢.如果要想网站打开速度快,就要学会使用DIV+CSS,将图片写进CSS,这样如果网站内容很多的时候,也不会影响网页的浏览.它 ...

  8. 从WinMain开始

    一.抽象渗漏法则 根据Joel的抽象渗漏法则,所有重大的抽象机制在某种程度上都是有漏洞的.Joel举过一个例子: C++字符串类型应该能让你假装字符串是个基本类型,它们尝试“字串很难处理”这个事实抽象 ...

  9. 大白菜U盘启动制作工具装机维护版V5.0–大白菜U盘下载中心

    大白菜U盘启动制作工具装机维护版V5.0–大白菜U盘下载中心   大白菜U盘启动制作工具装机维护版V5.0

  10. hdu4055 Number String

    Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...