//
// Person.h
// LessonSort
//
// Created by lanouhn on 14-8-9.
// Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject {
NSString *_name;//姓名
NSInteger _age;//年龄
CGFloat _height;//身高
}
//_name
//setter
- (void)setName:(NSString *)name;
//getter
- (NSString *)name;
//_age
//setter
- (void)setAge:(NSInteger)age;
//getter
- (NSInteger)age;
//_hight
//setter
- (void)setHeitht:(CGFloat)height;
//getter
- (CGFloat)height;
//重写description方法
- (NSString *)description;
//customize init method
- (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
//compare
- (NSComparisonResult)compareByAge:(Person *)anPerson;
- (NSComparisonResult)compareByHeight:(Person *)anPerson;
- (NSComparisonResult)compareByName:(Person *)anPerson;
//按姓名降序
- (NSComparisonResult)compareByNameDescending:(Person *)anPerson;
@end
//
// Person.m
// LessonSort
//
// Created by lanouhn on 14-8-9.
// Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//
#import "Person.h"
@implementation Person
#pragma mark - setter and getter
//_name
//setter
- (void)setName:(NSString *)name {
_name = name;
}
//getter
- (NSString *)name {
return _name;
}
//_age
//setter
- (void)setAge:(NSInteger)age {
_age = age;
}
//getter
- (NSInteger)age {
return _age;
}
//_hight
//setter
- (void)setHeitht:(CGFloat)height {
_height = height;
}
//getter
- (CGFloat)height {
return _height;
}
#pragma mark - override method
//重写description方法
- (NSString *)description
{
return [NSString stringWithFormat:@"name:%@, age:%ld, height:%g", _name, _age, _height];
}
#pragma mark - init method
- (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height {
self = [super init];
if (self) {
_name = name;
_age = age;
_height = height;
}
return self;
}
#pragma mark - compare method
//compare
//#warning 明天复习已经完成
- (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;//1
} else if ([self height] == [anPerson height]) {
return NSOrderedSame;//0
} else {
return NSOrderedAscending;//-1
}
}
- (NSComparisonResult)compareByName:(Person *)anPerson {
return [[self name] compare: [anPerson name]];
}
//按姓名降序
- (NSComparisonResult)compareByNameDescending:(Person *)anPerson {
return -[[self name] compare: [anPerson name]];
}
@end
//
// main.m
// LessonSort
//
// Created by lanouhn on 14-8-9.
// Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *wangYi = [[Person alloc] initWithName:@"wangYi" age:18 height:177.4];
Person *songEr = [[Person alloc] initWithName:@"songEr" age:19 height:180.41];
Person *zhangSan = [[Person alloc] initWithName:@"zhangSan" age:21 height:192];
Person *liSi = [[Person alloc] initWithName:@"liSi" age:22 height:177];
NSArray *arr = [[NSArray alloc] initWithObjects:wangYi, songEr, zhangSan, liSi, nil];
//对数组按中的对象按姓名按升序排序
NSArray *sortArrName = [arr sortedArrayUsingSelector:@selector(compareByName:)];
//可以直接打印,以数组的形式打印出来
NSLog(@"sortArrName %@", sortArrName);
//通过遍历打印出来, 打印出多条语句
for (Person *per in sortArrName) {
NSLog(@"%@", per);
}
//对数组按中的对象按年龄按升序排序
NSArray *sortArrAge = [arr sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"sortArrAge %@", sortArrAge);
//对数组按中的对象按升高按升序排序
NSArray *sortArrHeight = [arr sortedArrayUsingSelector:@selector(compareByHeight:)];
NSLog(@"sortArrHeight %@", sortArrHeight);
//对数组按中的对象按姓名按降序排序
NSArray *sortArrNameDescending = [arr sortedArrayUsingSelector:@selector(compareByNameDescending:)];
NSLog(@"sortArrNameDescending %@", sortArrNameDescending);
NSArray *arr2 = [[NSArray alloc] initWithObjects:@"bb", @"cc", @"dd", @"aa", @"ff", nil];
//1 对数组进行升序排序 sortedArrayUsingSelector:的排序方法使用场景:当数组中的对象类型是自定义的类以及要升序排序时
NSArray *sortArrAscending = [arr2 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@", sortArrAscending);
//2 对数组进行降序排序 block的排序方法使用场景:当数组中的对象类型是系统类型时, 并且要降序排序时
NSArray *sortArrDescending = [arr2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//对block匿名函数实现, 比较方法
//1 将id类型转为NSString *
NSString *str1 = (NSString *)obj1;
NSString *str2 = (NSString *)obj2;
//2 字符串比较
return -[str1 compare:str2];
}];
NSLog(@"%@", sortArrDescending);
}
return 0;
}