一、NSArray 

  NSArray是Cocoa的一个类,用来存储对象的有序列表。

限制:
  1、只能存储Object-C的对象,不能存储C语言中的基本数据类型,如:int、float、enum、struct或者NSArray中的随机指针;

  2、不可以存储nil(对象的零值或NULL值);至于为什么继续向下看

如何创建?

  通过类arrayWithObjects创建NSArray,以逗号分隔对象列表,在列表尾部添加nil代表列表结束(这就是不能在数组中存储nil的第一个原因(第二个继续向下)) 

可以使用NSNull代表没有值  +(NSNull *) null;

  NSArray *array;array=[NSArray arrayWithObjects:@"1",@"2",@"3",nill];

  数组对象个数:-(unsigned) count;

  根据索引获取对象:-(id)objectAtIndex:(unsigned int)index;

eg:

#import<Foundation/Foundation.h>int main(int argc,const char *argv)
{NSArray *array;array=[NSArray arrayWithObjects:@"1",@"2",@"3",nil];int i;for(i=0;i<[array count];i++){NSLog(@"第 %d 是:%@",i,[array objectAtIndex:i]);}
}

效果: 

切分数组

  使用-componentsSeparatedByString来切分NSArray

    NSString *string=@"kaka:18:PEPE:20";
      NSLog(@"没改变之前的我:%@",string);
      NSArray *array=[string componentsSeparatedByString:@":"]; [kəm'pəunənt] adj. 组成的,构成的n. 成分;组件;元件 ['sepəreit, 'sepərit]vt. 使分离;使分开;使分居

  使用componentsJoinedByString来合并NSArray中的元素并创建字符串

    string=[array componentsJoinedByString:@"*"];
      NSLog(@"改变之后的我:%@",string);

eg:

二、可变数组NSMutableArray

  NSString有一个可变字符串NSMutableString同理数组NSArray也有一个可变数组NSMutableArray创建方式同NSMutableString 如下:

    +(id)arrayWithCapacity:(unsigned)numitems

eg:

  NSMutableArray *array2 ;array2=[NSMutableArray arrayWithCapacity:17];NSArray *array3=[NSArray arrayWithObjects:@"one",@"two",@"three",nil];[array2 addObject:array3];int i;for( i=0;i<[array2 count];i++){NSLog(@"第 %d 是:%@",i,[array2 objectAtIndex:i]);}

效果:

删除:-(void)removeObjectAtIndex:(unsigned)index;

三、枚举王国

NSEnumerator它是Cocoa用来描述集合迭代运算的方式,可以通过objectEnumerator向数组请求枚举器:

  -(NSEnumerator *)objectEnumerator;

eg:

#import<Foundation/Foundation.h>
int main(int argc,const char *argv)
{NSArray *array;array=[NSArray arrayWithObjects:@"A",@"B",@"C",nil];NSEnumerator *enumerator;enumerator=[array objectEnumerator];id thing;//nextObject返回nil值时表示循环结束while(thing=[enumerator nextObject]){NSLog(@"I found %@",thing);}//reverseObjectEnumerator从后向前浏览集合enumerator= [array reverseObjectEnumerator];while(thing=[enumerator nextObject]){NSLog(@"I found %@",thing);}
}

效果:

注意:

  1、xtObject返回nil时表示循环结束这也是数组NSArray不能有nil的第二个原因

  2、不可以通过添加或者删除对象的方式来改变数组容器

四、快速枚举

  书上说是这样子的:

NSString  *string;for( string in array){NSLog(@"I found %@",string);}

可是我是Nodepad++ vs GNU 可能如书上所说这是一个新特性,运行不了;适合在Leopard或更高级版本的系统上运行程序

总结:

  介绍了三种方式遍历数组:索引、NSEnumerator、快速枚举

如果你的系统是高版本的操作系统或者是Leopard ['lepəd]n. 豹;美洲豹的那么选择第三种快速枚举.原因很简单就是快速简洁。

五、字典(又称:散列表、关联数组)

  NSDictionary:在给定的关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的的对象)。

  字典和数组都可以存储数据,但是对于频繁的查询大型的数据集来说使用字典的效率更高因为字典是键查询的优化存储方式,可以立即查找出要查询的数据,而不需要循环整个数组进行查询数据

  使用类方法dictionaryWithObjectsAndKeys来创建字典,以nil值作为终止符号

    +(id)dictionaryWithObjectsAndKeys:(id)firstObject,……

转载于:https://www.cnblogs.com/PEPE/archive/2012/08/25/2650373.html

Objective-C 日记④ 集合家族相关推荐

  1. Collection集合家族

    集合家族 数组:存储相同类型的多个元素 对象:存储不同类型的多个元素 集合:存储多个不同类型的对象 List List继承自Collection接口,是有序可重复的集合. 它的实现类有:ArrayLi ...

  2. 养蚕日记软件测试,养蚕成长观察日记集合8篇

    养蚕成长观察日记集合8篇 时间过得真快,一天又过去了,我们对人和事情也有了新的看法,这时候十分有必须要写一篇日记了.日记你想好怎么写了吗?以下是小编帮大家整理的养蚕成长观察日记8篇,希望能够帮助到大家 ...

  3. AC日记——集合位置 洛谷 P1491

    集合位置 思路: 次短路: 先走一遍最短路: 记录最短路径,然后依次删边走最短路: 最短的长度就是次短路: 来,上代码: #include <queue> #include <cma ...

  4. java学习日记 集合框架

    集合框架 有两大接口  一个是 Collection (类集 )与Map (映射): collection 下有两大接口  一个是List (列表) 另一个是Set(集合) List (列表):Arr ...

  5. 黑马程序员java学习日记——集合框架

    ------- android培训.java培训.期待与您交流! ---------- Java.util包中提供了一些集合类,这些集合类又被称为容器.集合类与数组的不同之处是,数组长度是固定的,集合 ...

  6. Ruby 札记 - Ruby 集合家族之数组(Array)

    学习 Ruby 集合我觉得最好的方式是打开 irb --simple-prompt 命令,跟着例子学习.试着借助 Tab 补全加以思考?. 创建数组 和其他动态语言创建相似. >> a = ...

  7. 微信小程序云开发小项目“研岸日记”日记记录分享,源码分享

    文章目录 1 概述 2 用户使用 3 日记交流页 4 日记详情页 5 发表者详情页 6 日记发表页 7 我的(非管理员) 8 高级权限(管理员) 9 数据库集合 10 源码 1 概述 1.1 关于本手 ...

  8. 微信小程序云开发日记类日记记录分享动态

    微信公众号:创享日记(微信号csds992022) 发送关键词:日记类小程序 免费获取源码 1 概述 1.1 关于本手册 为了使您对研岸日记记录社交软件的使用有清晰详尽的了解,特此编写<用户手册 ...

  9. 由点及面,一叶知秋------集合大家庭

    Java中的集合类实在是太丰富了,有常用的ArrayList.HashMap,也有不常用的Stack.Queue,有线程安全的Vector.HashTable,也有线程不安全的LinkedList.T ...

最新文章

  1. JSON.parse解析特殊字符报错解决方案
  2. iOS开发之让你的应用“动”起来转写
  3. HNSW nmslib
  4. @Configurattion注解的作用及一些列组合使用
  5. POJ 1449 amp; ZOJ 1036 Enigma(简单枚举)
  6. 转:java中static、final、static final的区别
  7. java rotate怎么用_jQuery旋转插件jqueryrotate用法详解
  8. Android 基础性能数据获取(/proc/)
  9. HTML+CSS+JS实现 ❤️发光糖果泡泡动画特效❤️
  10. 关于Spring MVC 中地址栏访问 /WEB-INF下的.jsp
  11. QT每日一练day8:信号与槽机制
  12. linux利用内存加快读盘速度,Linux性能优化从入门到实战:10 内存篇:如何利用Buffer和Cache优化程序的运行效率?...
  13. 大一Java课设,五子棋小游戏
  14. HDU2594 Simpsons’ Hidden Talents 前缀与后缀转化成用s1去匹配s2
  15. pythonpdf识别文字_python – 从PDF中读取字体颜色信息
  16. 微观经济学读书笔记(一)
  17. 数据的存储------计算机中常见数据类型的存储方式(C语言解析)
  18. 随手写了一段C++访问LDAP, 并且获取sid的代码
  19. 凑单这个技术活,阿里工程师怎么搞?
  20. 交换机学习----网桥

热门文章

  1. 《数据库设计入门经典》读书笔记——第二章:工作场所中的数据库建模
  2. Ptrace 一个Linux强大的工具
  3. 帝国备份王(Empirebak) \class\functions.php、\class\combakfun.php GETSHELL vul
  4. Quora使用到的技术
  5. HDU3930(离散对数与原根)
  6. ​​An Image is Worth 16x16 Words,那么一个视频是什么呢?阿里达摩院用STAM给你答案!...
  7. 手写公式识别 :基于深度学习的端到端方法
  8. 我对计算机网络的期待,表白对女朋友说的情话短句 我愿是你最期待的风景线...
  9. 年薪十万的王者荣耀,LOL游戏模型师的工作是这样的|附50G资料
  10. 【Matplotlib】【Python】如何使用matplotlib绘制散点图