对数组中的自定义的类型根据姓名,年龄排序(升序, 降序)sortedArrayUsingSelector

来源:互联网 发布:matlab合并三个矩阵 编辑:程序博客网 时间:2024/04/29 17:01
////  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;}

0 0