您的位置:首页 > 其它

OC学习之道:关于数组的四种排序

2015-04-06 21:44 204 查看
[code]// Copyright (c) 2015年 童星. All rights reserved.
// Person.h

#import

@interface Person : NSObject{
int _age;
NSString *_name;
}
//set方法main.m
-(void)setAge:(int)age;
-(void)setName:(NSString *)name;
//get方法
-(int)age;
-(NSString *)name;
//自定义初始化方法
-(id)initWithName:(NSString *)name Age:(int)age;
//自定义构造器
+(id)personWithName:(NSString *)name Age:(int)age;
//自定义排序方法
-(NSComparisonResult)comparePerson:(Person *)person;

//显示全部信息
-(void)showInfo;
@end
// Copyright (c) 2015年 tongxing. All rights reserved.
// Person.m

#import "Person.h"

@implementation Person
-(void)setAge:(int)age{
_age = age;
}
-(void)setName:(NSString *)name{
_name = name;
}
-(int)age{
return _age;
}
-(NSString *)name{
return _name;
}
-(id)initWithName:(NSString *)name Age:(int)age{
if (self = [super init]) {
_age = age;
_name = name;
}
return self;
}
+(id)personWithName:(NSString *)name Age:(int)age{
Person *person = [[Person alloc]initWithName:name Age:age];
return person;
}

//自定义排序方法
-(NSComparisonResult)comparePerson:(Person *)person{
//默认按年龄排序
NSComparisonResult result = [ [NSNumber numberWithInt:self.age] compare:[NSNumber numberWithInt:person.age]];//注意,基本数据类型要进行数据转换???1.默认的是升序还是降,2.类型转换.因为age不是对象,需要转化为number对象
//如果年龄一样,就按姓名排序
if (result == NSOrderedSame) {
result =[self.name compare:person.name];//替换compare前后的内容,可是实现不同的排序方式
////self.age是取得传过来的第一个对象,student.age代表传过来的第二个对象,交换过程在系统内部实现
}
return result;

}

-(void)showInfo{
NSLog(@"%@,%d",_name,_age);

}

//重写父类的description方法
-(NSString *)description{
NSString * str =[NSString stringWithFormat:@"姓名:%@,年龄:%d",_name,_age];
return str;
}
@end
// Copyright (c) 2015年 tongxing. All rights reserved.
//main.m
#pragma mark---sortedArrayUsingSelector:系统自带数组简单排序
void sortArray1(){
NSArray *array1 = [NSArray arrayWithObjects:@"abc",@"456",@"123",@"789",@"ef", nil];
//返回一个排好序的数组,原来的数组元素顺序不变,
//使用指定元素的比较方法
NSArray *sortedArray = [array1 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"排序后:%@",sortedArray);

}
#pragma mark---sortedArrayUsingSelector:自定义compare:数组简单排序
void sortArray2(){
Person *person1 =[Person personWithName:@"liuyifei" Age:26];
Person *person2 =[Person personWithName:@"tongxing" Age:23];
Person *person3 =[Person personWithName:@"zhoudongyu" Age:43];
Person *person4 =[Person personWithName:@"zhangfei" Age:23];
//使用指定的自定义排序的比较方法
NSArray *array2 =[NSArray arrayWithObjects:person1,person2,person3,person4,nil];
//调用排序函数
NSArray *array3 =[array2 sortedArrayUsingSelector:@selector(comparePerson:)];
//输出排序后的元素
for (int i=0; i
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息