OC中的遍历与排序

一、枚举器:NSEnumerator

定义:

①、能一一列举容器类中存储的元素

②、枚举类不需要自己去创建对象


数组中运用枚举器

①、定义一个数组

NSMutableArray *mArray = [@[object1,object2,……objectN] mutableCopy];

②、获取数组的枚举器

NSEnumerator *arrEnum = [mArrayobjectEnumerator];

③、用nextObject一一获取枚举器中的元素,当元素结束时,nextObject返回nil,nextObject方法每调用一次,或获取一个对象,并且下移

while(id object = [arrEnumnextObject]){

}

※注意:在枚举过程中,不能改变被枚举对象

④、获取数组的方向枚举器:[arrEnumreverseObjectEnum]

数组的快速枚举:for(object in collection){ 循环体;}

定义:for in 是对枚举进行封装后的结果

①、collection :被枚举对象 ----->容器类对象

②、object : 接收元素的变量


字典中运用枚举器

①、创建字典

NSMutableDictionary *mDict =[@{value1 : key1,value2:key2,……valueN : keyN} mutableCopy];

②、获取字典中的key的枚举器

NSMutableDictionary *dictEnum = [mDict keyEnumerator];

③、用nextObject获取key值

while(id key = [dictEnum nextObject]){

④、通过key获取对应的value

         id object = mDict[key];

}

※注意:不能改变被枚举对象的值


字典的快速枚举

①、字典的快速枚举只是枚举key值,通过它的key获取到它的value

for(object  in  mDict){

      id value = mDict[key];

}

※注意:不能改变被枚举对象的值


集合中的枚举

①、创建集合

ESMutableSet *Set = [[NSMutableSet alloc] initWithObjects: object1, object2, ……objectN ,nil];

②、获取集合中的枚举器

NSEnumerator *setEnum = [Set objectEnumerator];

③、通过nextObject获取集合的元素

while (id object  = [setEnum nextObject]){

快速枚举

for(id object in set){

}


二、排序

可变数组排序方法  

[mArray sortUsingSelector: @selector(方法)]

@selector 方法选择器


三、排序描述类:NSSortDescriptor

①、创建一个可变数组

NSMutableArray *mArray = [@[object1, object2, ……,objectN] mutableCopy];

②、创建描述类

NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc]initWithKey: 属性名称 ascending: (YES\NO)];

key: 排序主键 --> 对象属性名称

ascending: 是否是升序

③、按照排序描述进行排序

[mArray sortUsingDescriptors:@[sortDesc1,sortDesc2,……sortDescN];

※注意:

1、参数是数组,数组中必须是排序描述类对象

2、如果参数有多个排序描述时,首先按第一个描述排序,遇到相同属性,则按第二个进行排序,以此类推,可以多个排序描述

 

四、block    

1、定义block变量格式:

返回值(^block)(参数列表);

※注意:

①、它的代码块可以在函数内部定义

②、block在定义时没有返回值类型

③、block在函数体内定义时,不会被马上被执行

④、注意在右大括号后面记得加分号

2、有参有返回值

int (^block)(int a,int b) = ^(int a,int b){

      return: a+b;

};

3、无参无返回值

void (^blockVoid)() = ^(){

};

4、有参无返回值

void(^block)(int a,int b) = ^(int a,int b){

};

5、无参有返回值

int(^block)() = ^(inta,int b){

};

6、给block类型命别称

typedef BOOL (^comBlock)(int a,int b);

※注意:comBlock就是BOOL (^)(int a,int b)block类型的别称

定义时可以直接:

comBlock cc = ^(int a,int b){

}

7、block和局部变量

①、在block体中不可以修改局部变量的值,但在block体中可以访问局部变量的值

②、利用双下划线"__block"修饰过的变量,可以在block体中被修改,访问时的值是block被调用时的值

例子:

  __block int number = 10;

    comBlock cb = ^(int a,int b){

        number++;

        NSLog(@"blockNumber = %d",number);

        return YES;

    };

    NSLog(@"Number = %d",number);

    number = 100;

    number = 10000;

    cb(5,2);

    NSLog(@"Number1 = %d",number);


8、有关block的使用方法

arrayTwo = [arrayTwo sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1,         id  _Nonnull obj2) {

        Student *s1 = obj1;

        Student *s2 = obj2;

        if ([s1.name compare:s2.name] > 0) {

            return 1;

        }

        else if ([s1.name compare:s2.name] < 0){

            return -1;

        }

        return 0;

    }];

    NSLog(@"按照姓名排序后的结果:%@",arrayTwo);


注意:arrayTwo 是一个学生类的数组








                  












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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值