reference from :http://mobile.51cto.com/hot-434804.htm
1.构建Person类
Person.h
@interface Person : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *surname; @property (nonatomic, strong) NSDate *dateOfBirth; @end
2. 初始化ObjSort对象排序功能,包含一个NSArray数组,数组元素为自定义Person
ObjSort.h
/** * 对NSArray自定义对象排序类 */ @interface ObjSort : NSObject -(void)personsSort_NSComparator;//NSComparator比较器 @end
ObjSort.m
@interface ObjSort()
@property (nonatomic, strong) NSMutableArray *personObjs;//存储了若干个Person类对象的数组
@end
@implementation ObjSort
/**
* 初始化对象
* 初始化NSMutableArray数组personObjs的初始内容, 包装Person类对象
*/
-(instancetype)init{
self = [super init];
if (self == nil) {
return nil;
}
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy"];
Person *person[5];
for(int i=0; i<5; i++){
person[i] = [[Person alloc] init];
}
person[0].name = @"Smith";
person[0].surname = @"John";
person[0].dateOfBirth = [formatter dateFromString:@"03/01/1984"];
person[1].name = @"Andersen";
person[1].surname = @"Jane";
person[1].dateOfBirth = [formatter dateFromString:@"16/03/1979"];
person[2].name = @"Clark";
person[2].surname = @"Anne";
person[2].dateOfBirth = [formatter dateFromString:@"13/09/1995"];
person[3].name = @"Smith";
person[3].surname = @"David";
person[3].dateOfBirth = [formatter dateFromString:@"19/07/1981"];
person[4].name = @"Johnson";
person[4].surname = @"Rose";
person[4].dateOfBirth = [formatter dateFromString:@"22/02/1989"];
if (_personObjs==nil) {
_personObjs = [[NSMutableArray alloc] initWithCapacity:5];
}
for (int i=0; i<5; i++) {
[_personObjs addObject:person[i]];
}
[self showPersons:_personObjs];
return self;
}
/**
* 日志打印输出当前NSArray内容
*/
-(void)showPersons:(NSArray *)array{
Person *person;
if (_personObjs == nil) {
NSLog(@"nil");
}
for (int i =0; i< [array count]; i++) {
person = [array objectAtIndex:i];
if ([person isKindOfClass:[Person class]]) {
NSLog(@"---Person %d---", i);
NSLog(@"Name: %@", person.name);
NSLog(@"Surname: %@", person.surname);
NSLog(@"DateOfBirth: %@", person.dateOfBirth);
}
else{
NSLog(@"Object in personObjs is not Person class object.");
}
}
NSLog(@"All person print over.
");
}
方法一:NSComparator block + NSArray的 sortedArrayUsingSelector
在ObjSort中实现方法personsSort_NSComparator
/**
* 采用NSComparator比较的排序方法
*/
-(void)personsSort_NSComparator{
NSComparator sortBlock = ^(Person *p1 , Person *p2){
NSComparisonResult r1 = [p1.name compare:p2.name];
if(r1 != NSOrderedSame){
return r1;
}else {
NSComparisonResult r2 = [p1.surname compare:p2.surname];
if (r2 != NSOrderedSame)
return r2;
else
return [p1.dateOfBirth compare:p2.dateOfBirth];
}
};
NSArray *personList = [self.personObjs sortedArrayUsingComparator:sortBlock];
NSArray *personList = [self.personObjs sortedArrayUsingSelector:@selector(compare:)];
[self showPersons:personList];
}
方法二:利用对象的自定义方法compare:
Person.m中添加
-(NSComparisonResult)compare:(Person *)otherPerson{
NSComparisonResult r1 = [self.name compare:otherPerson.name];
if(r1 != NSOrderedSame){
return r1;
}else {
NSComparisonResult r2 = [self.surname compare:otherPerson.surname];
if (r2 != NSOrderedSame)
return r2;
else
return [self.dateOfBirth compare:otherPerson.dateOfBirth];
}
return [self.name compare:otherPerson.name];
}
ObjSort.m中添加
/**
* 采用自定义对象自定义函数compare进行NSArray排序
*/
-(void)personsSort_CustomCompare{
NSArray *personList = [self.personObjs sortedArrayUsingSelector:@selector(compare:)];
[self showPersons:personList];
}
在ObjSort.h中添加响应的接口
/** * 对NSArray自定义对象排序类 */ @interface ObjSort : NSObject -(void)personsSort_NSComparator;//NSComparator比较器 -(void)personsSort_CustomCompare;//对象自定义比较方法Compare @end
最后,在main.m(排序调用处)添加
ObjSort *objSort = [[ObjSort alloc] init];
[objSort personsSort_NSComparator];
方法一结果
---Person 0--- Name: Smith Surname: John DateOfBirth: 1984-01-02 16:00:00 +0000 ---Person 1--- Name: Andersen Surname: Jane DateOfBirth: 1979-03-15 16:00:00 +0000 ---Person 2--- Name: Clark Surname: Anne DateOfBirth: 1995-09-12 16:00:00 +0000 ---Person 3--- Name: Smith Surname: David DateOfBirth: 1981-07-18 16:00:00 +0000 ---Person 4--- Name: Johnson Surname: Rose DateOfBirth: 1989-02-21 16:00:00 +0000 All person print over. ---Person 0--- Name: Andersen Surname: Jane DateOfBirth: 1979-03-15 16:00:00 +0000 ---Person 1--- Name: Clark Surname: Anne DateOfBirth: 1995-09-12 16:00:00 +0000 ---Person 2--- Name: Johnson Surname: Rose DateOfBirth: 1989-02-21 16:00:00 +0000 ---Person 3--- Name: Smith Surname: David DateOfBirth: 1981-07-18 16:00:00 +0000 ---Person 4--- Name: Smith Surname: John DateOfBirth: 1984-01-02 16:00:00 +0000 All person print over.
方法二结果
---Person 0--- Name: Smith Surname: John DateOfBirth: 1984-01-02 16:00:00 +0000 ---Person 1--- Name: Andersen Surname: Jane DateOfBirth: 1979-03-15 16:00:00 +0000 ---Person 2--- Name: Clark Surname: Anne DateOfBirth: 1995-09-12 16:00:00 +0000 ---Person 3--- Name: Smith Surname: David DateOfBirth: 1981-07-18 16:00:00 +0000 ---Person 4--- Name: Johnson Surname: Rose DateOfBirth: 1989-02-21 16:00:00 +0000 All person print over. ---Person 0--- Name: Andersen Surname: Jane DateOfBirth: 1979-03-15 16:00:00 +0000 ---Person 1--- Name: Clark Surname: Anne DateOfBirth: 1995-09-12 16:00:00 +0000 ---Person 2--- Name: Johnson Surname: Rose DateOfBirth: 1989-02-21 16:00:00 +0000 ---Person 3--- Name: Smith Surname: David DateOfBirth: 1981-07-18 16:00:00 +0000 ---Person 4--- Name: Smith Surname: John DateOfBirth: 1984-01-02 16:00:00 +0000 All person print over.