一、OC数组
        OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray。
    1➣不可变数组的创建

    // 创建一个不可变数组。元素为一个OC字符串对象 @"小桥"NSArray *array1 = [NSArray arrayWithObject:@"小桥"];// 创建一个不可变数组,元素为多个OC字符串对象NSArray *array2 = [NSArray arrayWithObjects:@"葬花 桥", @"120岁", @"来自武汉" , nil];// 高速创建一个不可变数组NSArray *array3 = @[@"葬花 桥", @"120岁", @"来自武汉"]; // 这是Xcode的一个特性。它会把这句自己主动转换成上面那句

           高速创建数组@[]和 @"" 一样都是Xcode会自己主动替换成完整的语句。后面还有非常多其他的,像@{}等等。
     2➣OC数组的元素个数统计
        在C中的数组中。数组的下标就是数组元素的个数,OC数组中提供了count对象方法,如:

        // 输出array3的元素个数NSLog(@"数组元素个数=%ld", array3.count);

array3.count  调用数组的count方法就会返回元素的个数。
 
     3➣OC数组的訪问
        C数组的訪问非常easy。a[i]    这就是訪问数组a的第 i  个元素,OC数组中訪问指定元素例如以下:

        // 訪问数组元素NSLog(@"第%d个元素为%@", 0, [array3 objectAtIndex:0]);

   苹果官方为和简化。又提供了Xcode的新特性,OC数组的訪问变得简单。能够和C数组有一样的写法:

NSLog(@"第%d个元素为%@", 1 , array3[1]);<span style="font-family: Menlo; line-height: 1.6;"> </span>

简化的写法依旧是编译器自己主动替换成上一个写法,所以尽管写法一样但本质不同。
    4➣OC数组的遍历
        1.C中的数组遍历也能够用在OC数组中:

        // 1.传统遍历方法for (int i=0; i<array3.count; i++){NSLog(@"第%d个元素---%@", i, array3[i]);} 

            这是面向过程的数组遍历,以下两种是面向对象的数组遍历:
        2.

        // 2.OC遍历unsigned long i = 0; // 记住当前下标for (NSString *obj in array3) // array3中的对象所有是OC字符串,假设不是同一种类型就用 id{i = [array3 indexOfObject:obj]; // 获取当前元素的下标NSLog(@"第%ld个元素---%@", i, obj);} 

            这样的遍历不能获取当前的下标,必须定义标志变量 i 
        3.bloc遍历

        // 3.block遍历,调用enumerateObjectsUsingBlock: 方法。传递一个block參数[array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) // 这些參数由方法enumerateObjectsUsingBlock传递过来{NSLog(@"第%ld个元素----%@", idx, obj); // 对数组元素的操作在block中进行}]; 

            按小桥的理解block遍历并非在block中訪问的OC数组。而在 enumerateObjectsUsingBlock:这种方法中。当中                   的for循环中获取数组当前元素赋值给obj,而我们能够在block參数中写我们要运行的一些代码来操作数组元素,enumerateObjectsUsingBlock:方法每循环一次就调用一次block运行我们的代码,当中 *stop是一个地址传递的标志參数,能够控制循环是否继续下去,假设在block中赋值为 YES 那么遍历将停止。
     5➣可变数组的创建和使用
        因 为可变数组类是不可变数组类的子类,所以继承了父类的方法。使用同样,小桥这里主要讲下它自己独有的方法。

加入元素 :

        // 子类有父类的方法NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"葬花", @"桥" , nil];// 加入元素[array4 addObject:@"今天天气又不好"];

加入元素后数组中就多了一个元素
   删除元素 :

            // 删除元素所有元素    [array4 removeAllObjects];// 删除指定元素[array4 removeObject:@"桥"];

这仅仅是两个,还有非常多。小桥就不一一列举了。

以上就是OC数组的内容。小桥把用到的所有代码拷贝上来:

//
//  main.m
//  OC数组
//
//  Created by 葬花 桥 on 14-5-18.
//  Copyright (c) 2014年 itcast. All rights reserved.
//#import <Foundation/Foundation.h>int main()
{/*---------------------------------------------------------------数组的创建---------------------------------------------------------------*/// 创建一个不可变数组,元素为一个OC字符串对象 @"小桥"NSArray *array1 = [NSArray arrayWithObject:@"小桥"];// 创建一个不可变数组,元素为多个OC字符串对象NSArray *array2 = [NSArray arrayWithObjects:@"葬花 桥", @"120岁", @"来自武汉" , nil];// 高速创建一个不可变数组NSArray *array3 = @[@"葬花 桥", @"120岁", @"来自武汉"]; // 这是Xcode的一个特性。它会把这句自己主动转换成上面那句// 输出array3的元素个数// NSLog(@"数组元素个数=%ld", array3.count);// 訪问数组元素// NSLog(@"第%d个元素为%@", 0, [array3 objectAtIndex:0]);// NSLog(@"第%d个元素为%@", 1 , array3[1]);/*---------------------------------------------------------------数组的遍历---------------------------------------------------------------*/// 1.传统遍历方法for (int i=0; i<array3.count; i++){// NSLog(@"第%d个元素---%@", i, array3[i]);}// 2.OC遍历unsigned long i = 0; // 记住当前下标for (NSString *obj in array3) // array3中的对象所有是OC字符串。假设不是同一种类型就用 id{i = [array3 indexOfObject:obj]; // 获取当前元素的下标//NSLog(@"第%ld个元素---%@", i, obj);}// 3.block遍历,调用enumerateObjectsUsingBlock: 方法,传递一个block參数[array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) // 这些參数由方法enumerateObjectsUsingBlock传递过来{// NSLog(@"第%ld个元素----%@", idx, obj); // 对数组元素的操作在block中进行if (idx == 1){*stop = YES; // 当当前索引为 1 时停止遍历}}];/*---------------------------------------------------------------可变数组的创建和使用---------------------------------------------------------------*/// 子类有父类的方法NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"葬花", @"桥" , nil];// 加入元素[array4 addObject:@"今天天气又不好"];// 删除元素所有元素[array4 removeAllObjects];// 删除指定元素[array4 removeObject:@"桥"];for (id obj in array4){NSLog(@"array4---%@", obj);}return 0;
} 

二、NSSet
        NSSet也是一个集合,它和NSArray相似,能够存放多个OC对象,可是不能存放基本数据,本身也不能改变。可是子类能够改变。不同的是,NSSet没有顺序,而NSArray有顺序。

 三、NSDictionary
            字典类也是一个集合类,它里面存放的都是键--值对,通过键(key)就能找到值(value)。
     1➣字典的创建和使用

           // 创建单个键值对字典NSDictionary *dic = [NSDictionary dictionaryWithObject:@"葬花" forKey:@"姓"];// 创建多个键值对的字典NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"葬花", @"姓",@"桥", @"名",@"44125", @"QQ", nil];// 高速创建字典NSDictionary *dic3 = @{@"姓" : @"葬花"};

dic中存放着一个键值对,@"姓" 和 @"葬花" 。通过key索引就能找到相应的值:

        id obj = [dic objectForKey:@"姓"]; // 高速查找值id obj3 = dic3[@"姓"];

2➣可变字典
        和数组一样 ,它的一个子类,也能够在已有的字典上加入键值对,删除键值对。
        创建可变字典

        // 创建一个空的字典NSMutableDictionary *dic4 = [NSMutableDictionary dictionary];// 加入键值对[dic4 setObject:@"桥" forKey:@"名字"];[dic4 setObject:@"120岁" forKey:@"年龄"];[dic4 setObject:@"武汉" forKey:@"地址"];[dic4 setObject:@"44125" forKey:@"QQ"];

删除键值对

        // 删除键值对[dic4 removeObjectForKey:@"年龄"];

     字典遍历

        // 字典的遍历NSArray *keys = [dic4 allKeys]; // 找出全部keyfor (int i=0; i<dic4.count; i++){NSString *key4 = keys[i];    NSString *obj4 = dic4[key4]; // 找出key相应的valueNSLog(@"%@ = %@", key4, obj4);} // block遍历[dic4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){NSLog(@"%@ = %@", key, obj);}]; 

    数组与字典的嵌套

             // 数组中的元素为字典,每一个字典为一个人的信息NSArray *array = @[@{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @"44125"},@{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];// 訪问数组中的字典元素中的键值对NSString *str = array[0][@"QQ"]; // 取出数组中的第0个字典元素,再取出字典key相应的valueNSLog(@"%@", str);

        不难理解,array是一个oc数组,其他的每一个元素为字典对象。注意这里的訪问与C中的二维数组的訪问的差别。这里仅仅是用了编译器特性,它本质上是方法调用。
       还能够再嵌套

         // 数组中的元素为字典,每一个字典为一个人的信息,元素0中的字典中的QQ有两个NSArray *array2 = @[@{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @[@"44125", @"1234"]},@{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];// 訪问数组中的字典元素中的键值对NSString *str2 = array2[0][@"QQ"][1];NSLog(@"%@", str2);

        这里是数组中套字典,再在字典中套数组,第0个元素字典中的QQ键相应的值是一个数组。所以这里会输出
1234

小桥最后附上写笔记用到的全部字典代码

//
//  main.m
//  NSDictionary
//
//  Created by 葬花 桥 on 14-5-18.
//  Copyright (c) 2014年 itcast. All rights reserved.
//#import <Foundation/Foundation.h>int main()
{/*---------------------------------------------------------------字典的创建和使用---------------------------------------------------------------*/// 创建单个键值对字典NSDictionary *dic = [NSDictionary dictionaryWithObject:@"葬花" forKey:@"姓"];// 通过索引找到值id obj = [dic objectForKey:@"姓"];// 创建多个键值对的字典NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"葬花", @"姓",@"桥", @"名",@"44125", @"QQ", nil];// 高速创建字典NSDictionary *dic3 = @{@"姓" : @"葬花"};// 高速查找值id obj3 = dic3[@"姓"];// NSLog(@"%@", obj3);/*---------------------------------------------------------------可变字典的创建和使用---------------------------------------------------------------*/// 创建一个空的字典NSMutableDictionary *dic4 = [NSMutableDictionary dictionary];// 加入键值对[dic4 setObject:@"桥" forKey:@"名字"];[dic4 setObject:@"120岁" forKey:@"年龄"];[dic4 setObject:@"武汉" forKey:@"地址"];[dic4 setObject:@"44125" forKey:@"QQ"];// 删除键值对[dic4 removeObjectForKey:@"年龄"];// 字典的遍历NSArray *keys = [dic4 allKeys]; // 找出全部keyfor (int i=0; i<dic4.count; i++){NSString *key4 = keys[i];NSString *obj4 = dic4[key4]; // 找出key相应的value// NSLog(@"%@ = %@", key4, obj4);}// block遍历[dic4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){// NSLog(@"%@ = %@", key, obj);}];/*---------------------------------------------------------------字典与数组的嵌套---------------------------------------------------------------*/// 数组中的元素为字典,每一个字典为一个人的信息NSArray *array = @[@{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @"44125"},@{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];// 訪问数组中的字典元素中的键值对NSString *str = array[0][@"QQ"]; // 取出数组中的第0个字典元素。再取出字典key相应的value// NSLog(@"%@", str);// 数组中的元素为字典。每一个字典为一个人的信息,元素0中的字典中的QQ有两个NSArray *array2 = @[@{@"姓名" : @"葬花 桥", @"年龄" : @"120岁", @"QQ" : @[@"44125", @"1234"]},@{@"姓名" : @"SouBanaQiao", @"年龄" : @"20岁", @"QQ" : @"123456"},@{@"姓名" : @"一休", @"年龄" : @"13岁", @"QQ" : @"4568651"}];// 訪问数组中的字典元素中的键值对NSString *str2 = array2[0][@"QQ"][1];NSLog(@"%@", str2);return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/bhlsheji/p/4641172.html

OC本学习笔记Foundatio框架集相关推荐

  1. OC本学习笔记Foundation框架NSString与NSMutableString

      一.NSString与NSMutableString         相信大家对NSString类都不陌生.它是OC中提供的字符串类.它的对象中的字符串都是不可变的,而它的子类NSMutableS ...

  2. 尚硅谷云原生学习笔记(1-75集)

    笔记列表: 尚硅谷云原生学习笔记(1-75集) 尚硅谷云原生学习笔记(76~143集) 尚硅谷云原生学习笔记(144~172集) 尚硅谷云原生学习笔记(173~XXX集) 目录 1.什么是云计算 1. ...

  3. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...

  4. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  5. 开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)

    开源鸿蒙南向嵌入学习笔记--NAPI框架学习(一) 前言--系列介绍 本系列文章主要是记录笔者在鸿蒙南向的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些 ...

  6. 免费学习机器学习和深度学习的源码、学习笔记和框架分享

    机器学习和深度学习的免费学习源码.学习笔记和框架分享 python笔记 源码 python导入模块的的几种方式 在python中,字典按值排序 python中set的基本常用方法 python取出fr ...

  7. Redis 学习笔记八:集群模式

    Redis 学习笔记八:集群模式 作者:Grey 原文地址: 博客园:Redis 学习笔记八:集群模式 CSDN:Redis 学习笔记八:集群模式 前面提到的Redis 学习笔记七:主从复制和哨兵只能 ...

  8. HaaS学习笔记 | HaaS框架环境下基于MicroPython的LED跑马灯实现及比较

    [1]题目要求 [案例]:在HaaS框架下用原生MicroPython实现LED跑马灯.       蓝蜻蜓ESP32开发板的LED灯电路连接如下:          D3灯----GPIO14,高电 ...

  9. go-pitaya学习笔记(11) - 测试集群rpc

    学习笔记: 我家别墅靠大海/pitaya-learn 尝试集成功能:我家别墅靠大海/pitaya-game 如果你正在看此笔记,请你左边放笔记,右边放chatdemo的代码!! 我是按代码的顺序记的笔 ...

最新文章

  1. visualstudio发布网站到服务器,发布到网站 - Visual Studio (Windows) | Microsoft Docs
  2. 网易盖楼回复的简易实现
  3. BPM助力先声药业优化流程管理
  4. GPU Gems1 - 8 衍射的模拟
  5. java使用迭代器删除元素_使用Java从地图中删除元素
  6. 实践:创建异步 HTTP 处理器
  7. myeclipse连接mysql怎么调用_myeclipse连接mysql数据库详细步骤
  8. windows下mongoDB的环境配置
  9. 飞飞键盘鼠标连点器v1.0绿色版
  10. 笔记本无线上网卡的种类
  11. [译]写给初学者的Tensorflow介绍 - 2
  12. 10-Little prince's trip to Java-奇数魔方阵
  13. 数值分析-数值分析下的误差分析
  14. 机器学习-推荐系统-利用用户标签数据
  15. 光纤收发器测试方法和流程介绍
  16. js中常用到的一些解决问题方法(整理一些真正有效能够使用到项目中的方法)(等待不断更新积累)
  17. 情境领导者-第六章、产生胜利者 故事
  18. ClassNotFoundException: org.codehaus.plexus.logging.LoggerManager
  19. 基于Python的新闻识别预测n-gram模型和LSTM模型
  20. unity particle system 粒子系统 制作闪电放电效果

热门文章

  1. 14 款免费漂亮的 BuddyPress 主题
  2. Linux与win2003下修改mac地址方法
  3. python文件的读取和写入
  4. 泛架构之于外包IT工程
  5. VS2017 安装,建议大家都看一下这个在卸载,真人真事,防止扑街
  6. Windows 技术篇-任务管理器查看执行进程的程序所在位置方法,查看执行进程的命令行
  7. 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法
  8. Python+selenium 自动化-基本环境搭建,调用selenium库访问百度查询天气实例演示
  9. Visual Studio 2022编译x86 或者 win32程序时的错误MSB6006
  10. 根据刚体上若干个点的加速度确定任意点的加速度的方法