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

本文介绍如何创建一个自定义的Person类,并实现了姓名、年龄和身高的获取和设置方法,同时还提供了按姓名、年龄和身高进行排序的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
//  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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值