第08天OC语言(04):数组排序

  • 不要等到明天,明天太遥远,今天就行动。

#####须读:看完该文章你能做什么?

NSArray的排序(普通排序,给对象的属性排序)

#####学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

NSArray的基本使用


#####一、本章笔记

 一、数组的排序
    - (NSArray<ObjectType> *)sortedArrayUsingSelector:(SEL)comparator;

 二、数组的对象排序(比如对 person里面的一个属性进行排序)
     - (NSArray<ObjectType> *)sortedArrayWithOptions:(NSSortOptions)opts usingComparator:(NSComparator NS_NOESCAPE)cmptr NS_AVAILABLE(10_6, 4_0);

 三、什么是升序、降序
    升序就是从小到大,从低到高排。
    降序就是从大到小,从高到低排。

#####二、code ######main.m

#pragma mark 04-数组排序
#pragma mark 概念
/*
 一、数组的排序
    - (NSArray<ObjectType> *)sortedArrayUsingSelector:(SEL)comparator;

 二、数组的对象排序(比如对 person里面的一个属性进行排序)
     - (NSArray<ObjectType> *)sortedArrayWithOptions:(NSSortOptions)opts usingComparator:(NSComparator NS_NOESCAPE)cmptr NS_AVAILABLE(10_6, 4_0);

 三、什么是升序、降序
    升序就是从小到大,从低到高排。
    降序就是从大到小,从高到低排。
 */
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
    NSArray *arr = @[@20,@23,@11,@55,@12];
    // 注意 : 想使用compare方法对数组的元素进行排序, 那么数组中的元素必须是Foundation框架的对象, 也就是不能是自定义对象
    NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"排序前 :%@",arr);
    NSLog(@"排序后 :%@",newArr);

#warning 不能使用 compare: 方法对自定义进行排序
    Person *p1 = [Person new];
    p1.age = 10;
    Person *p2 = [Person new];
    p2.age = 20;
    Person *p3 = [Person new];
    p3.age = 5;
    Person *p4 = [Person new];
    p4.age = 8;

    NSArray *arr1 = @[p1,p2,p3,p4];
    NSLog(@"排序前 :%@",arr1);
    //按照人的年龄 进行排序
//     Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Person compare:]: unrecognized selector sent to instance 0x102b00080'
//    NSArray *newArr2 = [arr1 sortedArrayUsingSelector:@selector(compare:)];
    
//    NSSortConcurrent = (1UL << 0), // 并行 多线程
//    NSSortStable = (1UL << 4), // 安全
    // 排序算法
    // 该方法默认按照升序排序
    NSArray *newArr2 = [arr1 sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person * obj2) {
        // 每次调用该block都会 取出数组中的两个元素 给我们
        // 二分排序
        NSLog(@"obj1 = %@, obj2 = %@",obj1,obj2);
//        return obj1.age > obj2.age; // 升序 升序就是从小到大,从低到高排。
        return obj1.age < obj2.age; // 降序 降序就是从大到小,从高到低排。

    }];
    NSLog(@"排序后 :%@",newArr2);

    return 0;
}

######Person

>>>.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic,assign) int age;

@end

>>>.m
#import "Person.h"

@implementation Person

- (NSString *)description
{
    return [NSString stringWithFormat:@"age = %i",_age];
}

@end

转载于:https://my.oschina.net/u/3561184/blog/1476763

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值