1. 程式人生 > >對陣列中的自定義的型別根據姓名,年齡排序(升序, 降序)sortedArrayUsingSelector

對陣列中的自定義的型別根據姓名,年齡排序(升序, 降序)sortedArrayUsingSelector

//
//  Person.h
//  LessonSort
//
//  Created by lanouhn on 14-8-9.
//  Copyright (c) 2014年 [email protected] 陳聰雷. 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年 
[email protected]
陳聰雷. 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年
[email protected]
陳聰雷. 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; }