OC中的排序方法实例


OC中排序的方法实例分析:
下面是.h文件
#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    NSString *_name;//姓名
    NSInteger _age;//年龄
    CGFloat _height;//身高
}
//_name
- (void)setName:(NSString *)name;
- (NSString *)name;
//_age
- (void)setAge:(NSInteger)age;
- (NSInteger)age;
//height
- (void)setHeight:(CGFloat)height;
- (CGFloat)height;
//重写description
- (id)description;
//自定义初始化方法
- (id)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
//compare 比较方法
- (NSComparisonResult)compareByAge:(Person *)anotherPerson;
- (NSComparisonResult)compareByHeight:(Person *)anotherPerson;
- (NSComparisonResult)compareByName:(Person *)anotherPerson;
//按姓名降序排列
- (NSComparisonResult)compareByNameDes:(Person *)anotherPerson;
下面是.m文件
<pre name="code" class="cpp">#import "Person.h"

@implementation Person
#pragma mark - setter and getter
//_name
- (void)setName:(NSString *)name
{
    _name = name;
    
}
- (NSString *)name
{
    return _name;
}
//_age
- (void)setAge:(NSInteger)age
{
    _age = age;
}
- (NSInteger)age
{
    return _age;
}
//height
- (void)setHeight:(CGFloat)height
{
    _height = height;
}
- (CGFloat)height
{
    return _height;
}
#pragma mark - override methon
- (id)description
{
    return [NSString stringWithFormat:@"%@ %ld %g",_name,_age,_height];
}
#pragma mark - init mentod
- (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
//compare 比较方法
- (NSComparisonResult)compareByAge:(Person *)anotherPerson
{
    if ([self age] > [anotherPerson age]) {
        return NSOrderedDescending;// 1
    }else if([self age] == [anotherPerson age]){
        return NSOrderedSame;// 0
    }else{
        return NSOrderedAscending;// -1
    }
}
- (NSComparisonResult)compareByHeight:(Person *)anotherPerson
{
    if ([self height] > [anotherPerson height]) {
        return NSOrderedDescending;//1
    }else if ([self height] == [anotherPerson height]){
        return NSOrderedSame;//0
    }else{
        return NSOrderedAscending;//1
    }
}
- (NSComparisonResult)compareByName:(Person *)anotherPerson
{
//    if ([[self name] compare:[anotherPerson name]] == 1 ) {
//        return NSOrderedDescending;//1
//    }else if ([[self name]compare:[anotherPerson name]] == 0 ){
//        return NSOrderedSame;//0
//    }else{
//        return NSOrderedAscending;//-1
//    }
    return [[self name] compare:[anotherPerson name]];//1 0 -1
}
//降序
- (NSComparisonResult)compareByNameDes:(Person *)anotherPerson
{
    return -[[self name] compare:[anotherPerson name]];
}

@end


 
以下是main.m文件
<pre name="code" class="cpp">#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
//        Person *per1 = [[Person alloc]initWithName:@"xiaoguang" age:20 height:175];
//        Person *per2 = [[Person alloc]initWithName:@"xiaomeng" age:25 height:163];
//        Person *per3 = [[Person alloc]initWithName:@"dapeng" age:18 height:182];
//        Person *per4 = [[Person alloc]initWithName:@"dachui" age:35 height:165];
//        NSArray *arr = [[NSArray alloc]initWithObjects:per1,per2,per3,per4, nil];
//       //对数组中对象按姓名升序排序
//        NSArray *sortArrName = [arr sortedArrayUsingSelector:@selector(compareByName:)];
//        NSLog(@"%@",sortArrName);
//       //............年龄
//        NSArray *sortArrAge = [arr sortedArrayUsingSelector:@selector(compareByAge:)];
//        NSLog(@"%@",sortArrAge);
//      //.............身高
//        NSArray *sortArrHeight = [arr sortedArrayUsingSelector:@selector(compareByName:)];
//        NSLog(@"%@",sortArrHeight);
//       //对数组中对象按姓名降序排序
//        NSArray *sortArrNameDes = [arr sortedArrayUsingSelector:@selector(compareByNameDes:)];
//        NSLog(@"%@",sortArrNameDes);
 
        NSArray *arr = [[NSArray alloc]initWithObjects:@"aa",@"bb",@"cc",@"dd",@"ee",@"ff", nil];
        //1.对数组进行升序排序
        //sortedArrayUsingSelector 排序方式的使用场景:适用于升序排序以及自定义的类的排序
        NSArray *sortArrAscending = [arr sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@"%@",sortArrAscending);
        //2.对数组进行降序排列
        //block的排序方法使用场景:适用于当数组中的对象类型是系统类型时,并且要降序排序
        NSArray *sortArrDes1 = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        //对block匿名函数实现,比较方法
        //1.将id类型转为nssstring *;
            NSString *str1 = (NSString *)obj1;
            NSString *str2 = (NSString *)obj2;
        //2.字符串比较
            return  -[str1 compare:str2];
        }];
         NSLog(@"%@",sortArrDes1);


 
本文主要包含了对name age height 的升序降序排列  其中block 以及 -[str compare:] 注意仔细体会

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值