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
// 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
相关文章推荐
- OC学习之道:关于数组的集中经典遍历方法
- PHP关于数组的四种基础排序
- [oc学习笔记]数组的遍历和排序
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- OC学习第五天_字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序
- [oc学习笔记]数组的遍历和排序
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- 关于OC中的几种数组排序方法
- linq to sql 学习(5)关于排序的介绍
- PHP 数组学习排序全接触第1/2页
- PHP 数组学习排序全接触第1/2页
- 关于数组的认识01 - 零基础入门学习Delphi15
- PHP数组学习排序全接触
- 每天学习一算法系列(14) (输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 关于数组的认识02 - 零基础入门学习Delphi16
- php入门学习知识点五 关于php数组的几个基本操作
- 一到关于数组排序的算法题
- 关于数组的排序和旋转
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- php数组学习与排序:each与list结合