黑马程序员------Foundation框架------OC集合类的操作

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


OC集合类的操作


(1) OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以    存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等
(2) OC组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加*
(3) NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变
(4) NSArray数组和子类NSMutableArray的基本操作

 

   // 使用NSArray的类方法arry创建个数组
    // 创建时定义为空数组,那么array数组将永远是空数组
    NSArray *array = [NSArray array];
 NSArray的常见操作:


   
 // 创建数组对象有两种方式 
    // 第一种方式:
    NSArray *array = [NSArray arrayWithObjects:@"Jack",nil];
    // 数组中包含了两个NSString对象 nil是用来标识数组元素结束的标识
    // 因此OC数组中不能存放空对象
    NSArray *array1 = [NSArray arrayWithObjects:@"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


  
  // 遍历数组的三种方式
    // 第一种:
    for (int i = 0; i<array1.count; i++) {
        NSLog(@"%@",array1[i]); // 数组中存放的是对象可以用%@输出
        if (i ==0) {
            break;
        }
    }
    


    // 第二种:将array1数组中的每个对象拿出来赋给obj然后依次打印
    for (id obj in array1) {    // id obj 代表数组中的对象
        // 获取obj对象在数组中的索引
        NSUInteger index = [array1 indexOfObject:obj];
        NSLog(@"%ld-->%@",index,obj);
    }
    


    // 第三种:使用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;
        }
    }];


 NSMutableArray的基本操作:
  // 创建可变数组
    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];


(5) NSSet数组和子类NSMutableSet的基本操作


NSSet和NSArray都是不可变数组,一旦创建就无法改变。NSSet是无序的集合简单操作:
    // 创建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"];

 




(6) NSArray和NSSet数组的对比


都是可以存放任意类型的OC对象的集合,都不能存放基本数据类型
本身都是不可变的,但是子类都是可变的
NSArray是有序的集合,NSSet是无序的集合
(7) NSDictionary和NSMutableDictionary


NSDictionary和它的子类NSMutableDictionary都是以key/value的形式存在,NSDictionary本身为不可变集合
NSDictionary也是无序集合
字典集合中存储的值是以键值对的形式存在,如果存在相同的key那么后面key的值会被覆盖。但是允许vaule的重复
NSDictionary的基本操作
    // 常见创建Dictionary集合的四种方式
    
    // 1.创建一个空的字典集合类型
    NSDictionary *dic = [NSDictionary dictionary]; // 一旦为空 永久为空
    
    // 2.创建只有一组值的字典集合
    NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
    
    // 3.创建多个值的字典集合
    NSArray *keys = @[@"name",@"address",@"e-mail"];
    NSArray *values = @[@"Jack",@"北京",@"jack@163.com"];
    NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];
    
    // 4.通过值/键的方式来创建
    NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"Jack",@"name",
                          @"北京",@"address",
                          @"jack@163.com",@"e-mail",nil];
    
    // 5.类似于数组的创建方式 (推荐使用)
    NSDictionary *dic5 = @{@"name":@"Jack",
                           @"address":@"北京",
                           @"e-mail":@"jack@163.com"};

    // 取值:根据相应的Key取出对应的值
    NSString *name = [dic1 objectForKey:@"name"]; // 返回 Jack
    // 返回键值对的个数
    NSUInteger count = dic5.count; // 返回 4

    // 遍历NSDictionary数组用两种方式:
    // 第一种方式:
    // 获取字典中所有的键
    NSArray *allKeys = [dic5 allKeys]; // 获取的键在数组中是无序的
    
    for (int i = 0; i < dic5.count; i++) {
        NSString *key = allKeys[i];
        NSString *value = dic5[key];
        NSLog(@"%@-->%@",key,value);
    }
    
    // 第二种方式:将字典中的键值对传递给Block中的key和obj
    [dic5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@-->%@",key,obj);
     // 遍历一次立即停止 *stop = YES;
    }];



 


NSMutableDictionary的基本操作

    // 创建可变字典
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
    // NSMutableDictionary *mutableDic2 = @{@"name",@"Rose",@"address",@"北京"}; 错误的写法因为右边返回的是不可变的字典
    // 为可变字典添加元素
    [mutableDic setObject:@"Rose" forKey:@"name"];
    [mutableDic setObject:@"北京" forKey:@"address"];
    // 移除
    [mutableDic removeAllObjects];
    [mutableDic removeObjectForKey:@"name"];
    // 打印
    NSLog(@"%@",mutableDic); // 输出:address = "\U5317\U4eac"; name = Rose;     \U5317\U4eac 就是北京存储的形式



(8) 设计一个通讯录里面包含了四个人的姓名、电话、地址

    NSArray *friends = @[
         @{@"name":@"张三",@"phone":@"13993214321",@"address":@"北京"},
         @{@"name":@"李斯",@"phone":@"13498766789",@"address":@"上海"},
         @{@"name":@"王武",@"phone":@"15898766789",@"address":@"天津"},
         @{@"name":@"赵柳",@"phone":@"18798766789",@"address":@"南京"}];
    
    // 获取‘李斯’的通讯录信息
    NSDictionary *dic = friends[1];
    NSLog(@"%@",dic);



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值