黑马程序员_OC学习笔记之Foundation框架集合类

                                 ----------- android培训、java培训、ios学习型技术博客、期待与您交流! ------------

 

                 OC--集合类

 

1.OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等

 

2.OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加*

 

3.NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变

 

4.NSArray数组和子类NSMutableArray的基本操作:

 

    1>使用NSArray的类方法arry创建个数组,创建时定义为空数组,那么array数组将永远是空数组

    NSArray *array = [NSArray array];

 

    2>创建数组对象有两种方式:

 

    NSArray *array = [NSArray arrayWithObjects:@"Jack",nil];

    // 数组中包含了两个NSString对象 nil是用来标识数组元素结束的标识

    // 因此OC数组中不能存放空对象

    NSArray *array1 = [NSArrayarrayWithObjects:@"Jack",@"Rose", nil];

 

    // 第二种方式:

    NSArray *array2 = @[@"Jack",@"Rose"];

 

    // 获取数组的长度 array1.count;

    NSUInteger count = [array1 count];

    NSLog(@"%ld",count);

    // 访问数组中的对象的两种方式

    NSString *str1 = [array1 objectAtIndex:0]; //数组中索引为1的对象,OC中提供的方法 返回:Jack

    NSString *str2 = array1[0];                //编译器特性其实还是转为上面的形式来访问 返回:Jack

 

5.遍历数组的三种方式

    1>普通方式:

    for (int i = 0; i

    {

        NSLog(@"%@",array1[i]); // 数组中存放的是对象可以用%@输出

        if (i ==0)

        {

            break;

        }

    }

 

    2>将array1数组中的每个对象拿出来赋给obj然后依次打印

    for (id obj in array1)

    {    // id obj 代表数组中的对象

        // 获取obj对象在数组中的索引

        NSUInteger index = [array1 indexOfObject:obj];

        NSLog(@"%ld--%@",index,obj);

    }

 

 

    3>使用Block 每次从数组中遍历一个元素后就传递给block,block也相应的执行一次

    // block中的id obj对应数组中的元素,NSUInteger idx对应数组中元素的索引 BOOL用来停止遍历

    [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)

     {

        

        NSLog(@"%ld--%@",idx,obj);

        

        // 如果索引为0 立即停止遍历

        if (idx ==0)

        {

            *stop = YES;

        }

     };

6.NSMutableArray的基本操作:

 

     1>创建可变数组:

     

    NSMutableArray *mutableArray = [NSMutableArray array];

 

    NSMutableArray *mutalbeArray2 = @[@"张三",@"李斯"];  注意:@[]返回的是不可变NSArray数组 这样会报错

      // 为可变数组增加任意对象

    Person *person = [[Person alloc] init];

    [mutableArray addObject:person];

    [mutableArray addObject:@"Jack"];

    [mutableArray addObject:@"John"];

    // [mutableArray addObject:10]; 数组中不可以存放基本数据类型

    // 从数组中删除指定的元素

    [mutableArray removeObject:@"John"];

    [mutableArray removeObjectAtIndex:0];

    // 将数组中的元素全部删除

    [mutableArray removeAllObjects];

 

7.NSSet数组和子类NSMutableSet的基本操作:NSSet和NSArray都是不可变数组,一旦创建就无法改变。NSSet是无序的集合简单操作

 

     1>创建NSSet集合:

     

    NSSet *set = [NSSet set]; // 一旦创建为空永远为空

    NSSet *set2 = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim",nil];

 

    // 随机获取NSSet集合中的元素

    NSString *str = [set2 anyObject];

    NSLog(@"%@",str);

 

    NSMutableSet的简单操作:

 

    // 创建可变set集合

    NSMutableSet *mutableSet = [NSMutableSet set];

 

    // 为set添加集合

    [mutableSet addObject:@"Jack"];

    [mutableSet addObject:@"Rose"];

 

    // 删除元素

    [mutableSet removeObject:@"Jack"];

 

 

 

8.NSArray和NSSet数组的对比:

     1>都是可以存放任意类型的OC对象的集合,都不能存放基本数据类型

     

     2>本身都是不可变的,但是子类都是可变的

     

     3>NSArray是有序的集合,NSSet是无序的集合

 

9.NSDictionary和NSMutableDictionary:

 

     1>NSDictionary和它的子类NSMutableDictionary都是以key/value的形式存在,NSDictionary本身为不可变集合

     

     2>NSDictionary也是无序集合

     

     3>字典集合中存储的值是以键值对的形式存在,如果存在相同的key那么后面key的值会被覆盖。但是允许vaule的重复

10.NSDictionary的基本操作

 

     1>常见创建Dictionary集合的四种方式

 

    // 1.创建一个空的字典集合类型

    NSDictionary *dic = [NSDictionary dictionary];// 一旦为空 永久为空

 

    // 2.创建只有一组值的字典集合

    NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];

 

    // 3.创建多个值的字典集合

    NSArray *keys = @[@"name",@"address",@"e-mail"];

    NSArray *values = @[@"Jack",@"北京",@"[email protected]"];

    NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];

 

    // 4.通过值/键的方式来创建

    NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys:

                          @"Jack",@"name",

                          @"北京",@"address",

                          @"[email protected]",@"e-mail",nil];

 

    // 5.类似于数组的创建方式

    NSDictionary *dic5 = @{@"name":@"Jack",

                           @"address":@"北京",

                           @"e-mail":@"[email protected]"};

 

    // 取值:根据相应的Key取出对应的值

    NSString *name = [dic1 objectForKey:@"name"];// 返回 Jack

    // 返回键值对的个数

    NSUInteger count = dic5.count; // 返回 4

 

11.遍历NSDictionary数组用两种方式:

    1>

    NSArray *allKeys = [dic5 allKeys]; // 获取的键在数组中是无序的

 

    for (int i = 0; i < dic5.count; i++)

    {

        NSString *key = allKeys[i];

        NSString *value = dic5[key];

        NSLog(@"%@-->%@",key,value);

    }

 

    2> 将字典中的键值对传递给Block中的key和obj

    [dic5 enumerateKeysAndObjectsUsingBlock:^(idkey, id obj, BOOL *stop)

     {

        NSLog(@"%@-->%@",key,obj);

             // 遍历一次立即停止 *stop = YES;

     };

 

 

12.NSMutableDictionary的基本操作:

 

    1>创建可变字典

    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];

    NSMutableDictionary *mutableDic2 =@{@"name",@"Rose",@"address",@"北京"}; 错误的写法因为右边返回的是不可变的字典

     

    2>为可变字典添加元素

    [mutableDic setObject:@"Rose" forKey:@"name"];

    [mutableDic setObject:@"北京"forKey:@"address"];

     

    3>移除

    [mutableDic removeAllObjects];

    [mutableDic removeObjectForKey:@"name"];

     

    4>打印

    NSLog(@"%@",mutableDic);

 

                      ----------- android培训、java培训、ios学习型技术博客、期待与您交流! ------------

转载于:https://www.cnblogs.com/blog-lc/p/3807273.html

你可能感兴趣的:(黑马程序员_OC学习笔记之Foundation框架集合类)