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 ...
随机推荐
- iOS两个强制旋转屏幕的方法
第一个: // 状态栏动画持续时间 CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimation ...
- CF437D(The Child and Zoo)最小生成树
题目: D. The Child and Zoo time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 控制台程序的参数解析类库 CommandLine
C#控制台程序的参数解析类库 CommandLine简单使用说明 前言 C#开发的控制台程序,默认接收string[] args参数.如果有多个参数需要输入时,可以按照顺序依次输入:但如果有些参数不是 ...
- 【Demo 0015】位置服务及地图
本章学习要点: 1. 掌握位置相关类(CLLocationManager,MKUserLocation) 基本用法; 2. 掌握地图视图(MKMapView)基本用法; ...
- C++自删除
#pragma once class AutoRelease { public: AutoRelease(void){ m_count = 0; } virtual ~AutoRelease(void ...
- GitHub上最受欢迎的Android开源项目TOP20
以下这些开源项目都是从GitHub上筛选的,我强烈推荐android程序源代码有时间的时候自己在上面淘淘,或许能发现自己须要的开源程序. 了解开源项目有两个优点: 1.借鉴代码,一般来说.火爆的开源项 ...
- 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
注:ccp是cocos2dx中的一个宏定义,#define ccp(__X__,__Y__)CCPointMake((float)__X__, (float)__Y__),在此文章中表示坐标信息 1. ...
- 【错误】expected constructor, destructor, or type conversion before '.' token - 第八个游侠的日志 - 网易博客
[错误]expected constructor, destructor, or type conversion before '.' token - 第八个游侠的日志 - 网易博客 [错误]expe ...
- Android开发周报:Flyme OS开源、经典开源项目解析
Android开发周报:Flyme OS开源.经典开源项目解析 新闻 <魅族Flyme OS源码上线Github> :近日魅族正式发布了MX5,并且在发布会上,魅族还宣布Flyme OS开 ...
- GNU libmicrohttpd 0.9.29 发布 - 开源中国社区
GNU libmicrohttpd 0.9.29 发布 - 开源中国社区 GNU libmicrohttpd 0.9.29 发布