一:NSArray 和NSMutableArray
1: NSArray:不可变数组
NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型
它使不可变的,一旦初始化完毕,内容不能改变,也不能添加元素。
而C语言中的数组只能存放一种数据类型
(1) 普通数组的用法
// 普通数组的创建
//        int arr[5] = {1,3,4};// 对象数组的创建
//        Person *p = [[Person alloc] init];
//        Person *arrP[5] = {p, [[Person alloc] init]};

(2):NSArray的创建

 

        // 0,创建的数组对象永远都是空数组,也就没有任何意义,因为NSArray是不可变的
//        NSArray *arr1 = [NSArray array];// 1, 创建只有一个对象的数组
//        NSArray *arr2 = [NSArray arrayWithObject:p];
//        NSLog(@"%ld", arr2.count); // 结果 1// 2, 创建多了对象的数组,注意nil必须填写,数组元素什么时候结束
//        NSArray *arr3 = [NSArray arrayWithObjects:@"12", @"34", nil];
//        NSLog(@"%ld", arr3.count); //结果:2// 3,快速创建一个NSArray
//        NSArray *arr4 = @[@"12", @"34"];
//        NSLog(@"%@", arr4); // 结果: (12,34)

(3)OC数组的访问

// 获取数组中元素的个数
//        NSArray *arr5 = @[@"hello", @"world", @"china"];
//        NSLog(@"%ld", arr5.count); // 结果 3
//
//        // 访问数组中指定位置的元素
//        NSString *str = [arr5 objectAtIndex:2];
//        NSLog(@"%@", str); // china
//
//        // 快速访问数据指定位置的元素值
//        NSString *str2 = arr5[1];
//        NSLog(@"%@", str2); // 结果:world
//
//        // 查找指定元素的位置
//        NSUInteger index = [arr5 indexOfObject:@"hello"];
//        NSLog(@"index = %ld", index); // 结果 0;// 获取第一个元素
//          id str = [arr5 firstObject];
//          NSLog(@"%@", str);//  获取最后一个元素
//        id  str = [arr5 lastObject];
//        NSLog(@"%@", str);
//
//        // 判断数组中是否存在摸个元素
//        BOOL b = [arr5 containsObject:@"hello"];
//        NSLog(@"%d", b);

(4)OC数组的遍历

// 1,通过for循环简单遍历
//        NSArray *arr6 = @[@"hello", @"china", @"world"];
////        for (int i = 0; i<arr6.count; i++) {
//            NSLog(@"%@", [arr6 objectAtIndex:i]);
////            NSLog(@"%@", arr6[i]);
////        }
//
//        // 2,通过for in进行遍历
////        for (NSString *str in arr6) {
////            NSLog(@"%@", str);
////        }
//
//        // 3,通过数组的方法 Block
//        [arr6 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//            if (idx == 1) {
//                *stop = YES;
//            }
//            NSLog(@"%@----%ld", obj, idx);
//        }];/***  这个方法是每遍历到一个元素,就把这个元素还有索引当做一个参数传给Block*/// enumerateObjectsUsingBlock遍历的深入研究,内部是怎么实现的
//        void(^myBlock)(id obj, NSUInteger idx, BOOL *stop) = ^(id obj, NSUInteger idx, BOOL *stop){
//            NSLog(@"%@----%ld", obj, idx);
//            if (idx == 1) {
//                *stop = YES;
//            }
//        };
//        for (int i = 0; i<arr6.count; i++) {
//
//            id obj = arr6[i];
//            BOOL isStop = NO;
//            myBlock(obj, i, &isStop);
//            if (isStop) {
//
//                break;
//            }
//        }

(5)OC数组给数组中的所有元素发送消息及带一个参数的消息

Person *p1 = [[Person alloc] init];
//        p1.name = @"张伯伦";
//
//        Person *p2 = [[Person alloc] init];
//        p2.name = @"乔丹";
//
//        Person *p3 = [[Person alloc] init];
//        p3.name = @"奥尼尔";
//
//        NSArray *arr = @[p1, p2, p3];
//        [arr makeObjectsPerformSelector:@selector(sayHi)];
//        [arr makeObjectsPerformSelector:@selector(say:) withObject:@"你好"];/***  这个方法会向数组中存放的每一个对象发送消息,不过只能有一个参数的消息方法*/

(6)OC数组的文件夹的读取操作:

        // NSArray 只能写入字符串类型的数据,,NSDictionary才可以写对象到文件,在苹果开发中,遇到xml文件,可以把后缀该为.plist,这样就可以使用xcode打开编辑了。
//        NSArray *arr6 = @[@"hello", @"china", @"world"];
//        NSLog(@"%d",[arr6 writeToFile:@"/Users/ll/Desktop/text.plist" atomically:YES]);
//        NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/llDesktop/text.plist" ];
//        NSLog(@"%@", arr);

(7)NSString和NSArray

        NSArray *array = @[@"乔丹", @"科比", @"加内特"];// 将数组用一个指定的字符串拼接起来
//        NSString *str = [array componentsJoinedByString:@"NBA"];// 将字符串带⭐️字符串分割成一个数组
//        NSString *str = @"乔丹⭐️科比⭐️加内特";
//        NSArray *array2 = [str componentsSeparatedByString:@"⭐️"];
//        NSLog(@"%@", array2);

2 > NSMutableArray的用法
创建添加删除元素(它是一个可变数组)
        // 创建一个可变数组// 添加元素
//        NSMutableArray *arrM = [NSMutableArray arrayWithObject:@"world"];
//        [arrM addObject:@"hello"];
//
//        // OC数组不能添加nil对象 错误
////        [arrM addObject:nil];
//
//        // 删除元素
////        [arrM removeObject:@"hello"];
////        [arrM removeAllObjects];
//          // 删除指定位置的元素
//        [arrM removeObjectAtIndex:1];
//        NSLog(@"%@", arrM);// 替换元素
//        NSArray *array1 = @[@"a", @"b", @"c"];
//        NSMutableArray *arrM = [NSMutableArray arrayWithArray:array1];
//        [arrM replaceObjectAtIndex:1 withObject:@"m"];
//        [arrM exchangeObjectAtIndex:1 withObjectAtIndex:2];
//        NSLog(@"%@", arrM);

注意:
  • NSMutableArray *array = @[@"bob", @"steve", @"john"];

  • [array addObject:@“Peter”];// 错误,使⽤用@[@"bob", @"steve", @"john"]这种⽅方式 创建的永远是NSArray(不可变数组)

  • //正确

  • NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"bob",

    @"steve", @"john"]];

  • [array addObject:@"Peter”];

    二:NSDictionary

    什么是NSDictionary

    ➢ NSDictionary翻译过来叫做”字典”

    ➢ ⽇日常⽣生活中, “字典”的作⽤用: 通过⼀一个拼⾳音或者汉字, 就能找到对应的详细解 释

    ➢ NSDictionary的作⽤用类似: 通过⼀一个key, 就能找到对应的value ➢ NSDictionary是不可变的, ⼀一旦初始化完毕, ⾥里⾯面的内容就⽆无法修改

    1)不可变字典的创建

  •         // 1,创建字典及初始化, 不可变// 没有任何意义
    //        NSDictionary *dic = [NSDictionary dictionary]; //// 创建只有一个键值对的字典
    //        NSDictionary *dic = [NSDictionary dictionaryWithObject:@"yaoming"
    //            forKey:@"ym"];// 创建多个键值对字典
    //        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"liuxiang", @"lx", @"tianliang", @"tl", nil];//        // 快速创建方法
    //        NSDictionary *dic = @{@"ym":@"yaoming", @"lx":@"liuxiang"};
    //        NSLog(@"%@", dic);

    2)字典的访问

  • // 2,字典访问
    //        NSDictionary *dict = @{@"zs" : @"zhangsan", @"ls" : @"lisi", @"ww" : @"Wangwu"};// 返回字典中的键值数目 count
    //        NSUInteger length = dict.count;// 根据键求值
    //        id str = [dict objectForKey:@"zs"];// 快速访问
    //        id str = dict[@"zs"];
    //        NSLog(@"str = %@", str);

    3)字典的遍历

  •         // 3,字典的遍历
    //        NSDictionary *dict = @{@"zs" : @"zhangsan", @"ls" : @"lisi", @"ww" : @"Wangwu"};// for循环
    //        id key = [dict allKeys]; // 可以知道字典中所有的值
    //        for (int i = 0; i<dict.count; i++) {
    //
    //            id str = dict[key[i]];
    //            NSLog(@"%@:%@", key[i], str);
    //        }// for in遍历字典中的所有的键
    //        for (NSString  *key in dict) {
    //
    //            id str = dict[key];
    //            NSLog(@"%@:%@", key, str);
    //        }// Block
    //        [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    //            NSLog(@"%@:%@", key, obj);
    //        }];

    4)字典读取文件的操作

  •         // 4,把字典写入到文件
    //        NSDictionary *dict = @{@"zs" : @"zhangsan", @"ls" : @"lisi", @"ww" : @"Wangwu"};
    //
    //        [dict writeToFile:@"/Users/ll/Desktop/te.plist" atomically:YES];// 用字典读取文件
    //        NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:@"/Users/ll/Desktop/te.plist"];
    //        NSLog(@"%@", dic);

  • 注意:字典中的键不要重复。(虽然重复也不报错,会⾃自动取在前⾯面的那个)

    2,NSMutableDictionary

    • 什么是NSMutableDictionary

    ➢ NSMutableDictionary是NSDictionary的⼦子类

    ➢ NSDictionary是不可变的, ⼀一旦初始化完毕后, 它⾥里⾯面的内容就永远是固定 的, 不能删除⾥里⾯面的元素, 也不能再往⾥里⾯面添加元素

    ➢ NSMutableDictionary是可变的, 随时可以往⾥里⾯面添加\更改\删除元素

    NSMutableDictionary的用法

            // 1,创建一个空的可变字典NSMutableDictionary *dicM = [NSMutableDictionary dictionary];[dicM setObject:@"zhangsan" forKey:@"zs"];// 2,删除指定键值对
    //        [dicM removeObjectForKey:@"zs"];// 3,删除字典中所有内容
            [dicM removeAllObjects];NSLog(@"%@", dicM);/***  注意:@{键:值}创建的字典为不可变字典 ,不用赋值给可变字典及后续操作*/

转载于:https://www.cnblogs.com/-boy/p/4096453.html

OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法相关推荐

  1. iOS开发中对NSArray或者NSMutableArray中的内容排序

    原文引用至               http://blog.unieagle.net/2012/05/10/ios开发中对nsarray或者nsmutablearray中的内容排序/ NSMuta ...

  2. 目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结

    做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...

  3. 目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结(转)

    做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...

  4. Swift的数组与OC中数组的区别

    相同的值可以多次出现在一个数组的不同位置: Swift中的数组,数据值在被存储进入到某个数组之前类型必须明确,可以显示的类型标注或者类型推断.而且,Swift中的数组不必是对象类型. OC中的NSAr ...

  5. 关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary

    NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary 在 OC 中我们天天都要用,而我们要怎 ...

  6. OC中的NSNumber、NSArray、NSString的常用方法

    和C语言不同,在Objective-C语言中,有单独的字符串类NSString.C语言中,string是由 char(ASCLL码)字符组成 OC中,字符串是由unichar(Unicode)字符组成 ...

  7. OC中的数组:NSArray

    一.oc中的数组:NSArray 定义: NSArray *arrayName=[NSArray arrayWithObjects:obj1,obj2,obj3,obj4,nil];//数组是以nil ...

  8. [Objective-C]OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)

    一:字典的基本概念 Foundation中的字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合.正如,我们在字典里查找单词的定义一样. 通过key(键) ...

  9. OC中JSON解析与XML解析

    文章目录 ###JSON JSON是一种轻量级的数据格式,一般用于数据交互: 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外). JSON的格式很像OC中的字典和数组,标准 ...

最新文章

  1. 静态链接库与动态链接库 (二)动态链接库的编译与使用
  2. 面试 6:调整数组顺序使奇数位于偶数前面
  3. PL/SQL Developer报错提示 Not logged on 问题完美解决方案
  4. 逻辑地址,线性地址,物理地址
  5. 决策树结合网格搜索交叉验证的例子
  6. 记录 之 不同的Normalization方式
  7. pthread_once()
  8. 统计进仓和出仓数量随时间变化的剩余数量流程图
  9. php获取继承类方法吗,php如何获取当前类名,继承中的问题?
  10. redis_学习_02_redis 可视化工具 Redis Desktop Manager
  11. [文艺节目/礼仪大赛策划方案]图:选手出场时?如何用Flash透明渲染PPT?展示排行榜时如何使用PPT及Flash渲染?
  12. Fleaphp函数用法举例
  13. Linux:linux终端命令关闭pycharm
  14. Django(wsgi,middleware,url源码剖析)
  15. 渗透测试实验_安装Windows7旗舰版
  16. iOS 的 (签名验签)Code Signing 体系
  17. 以服务为驱动 自上而下创建私有云
  18. 数据管理-数据质量检测
  19. iOS开发之swift资料大全
  20. T-S型模糊算法简述及FPGA的实现

热门文章

  1. linux环境下nacos的安装+启动,阿里云服务器安装nacos
  2. 2022-2028年中国DTRO膜行业市场全景评估及产业前景规划报告
  3. 数据结构(01)— 算法复杂度概念及常见的复杂度计算
  4. 确定修改——取消修改
  5. Plotly_绘图画图作图交互
  6. tensorflow学习笔记(二十五):ConfigProtoGPU
  7. TensorFlow简单线性回归
  8. Ascend Pytorch算子适配层开发
  9. 用Auto-TensorCore代码生成优化matmul
  10. Python使用Redis实现IP代理池