为什么用集合
有时候系统中有很多的对象,我们想要有条理的将其进行管理
首先想到的就是使用数组来管理一批数据
但是数组有局限性,例如下标的检查,我们需要自己进行
Cocoa提供了一系列的集合类可以实现这些批量数据管理的功能
并且提供了很多便利的方法可以对数据进行管理
NSArry类
1.NSArray是一个Cocoa类,用来存储对象的有序列表
2.NSArray中可以放入任何类型的Objective-C对象
3.NSArray中不能存放C语言类型
4.NSArray对象作为一个容器来容纳其他的对象,并且可以通过NSArray对这些对象进行管理
5.NSArray对象也可以当做方法参数或返回值使用
使用NSArry
使用NSArray类时需要注意,不能在其中存放nil,因为nil是一个NSArray结束的标识
通过NSArray的类方法arrayWithObjects:来创建一个NSArray对象
NSArray *array = [NSArray arrayWithObjects : @”one”, @”two”, @”three”, nil ];
获取集合中对象的个数(主要用在循环遍历数组)
-(unsigned long) count;
![](https://img.haomeiwen.com/i841337/c9f22729050d1050.png)
获取指定索引处的对象(通过数组的下标来获取对象)
-(id) objectAtIndex : (unsigned long) index;
![](https://img.haomeiwen.com/i841337/892317940b04959c.png)
![](https://img.haomeiwen.com/i841337/4a3f7e828402d9f6.png)
当访问NSArray时,索引超出元素个数之后会报一个异常出来
所以最好检查一下索引是否越界,然后再进行调用
![](https://img.haomeiwen.com/i841337/11c2faf7c37986c8.png)
可变数组添加对象
-NSArray和NSString一样,创建的是不可变大小的数组,容量固定
-如果想要使用容量变化的数组,可以使用NSMutableArray
-同样的NSMutableArray使用arrayWithCapacity:方法来创建
+(id)arrayWithCapacity:(unsigned long)numItems;
使用addObject方法在数组最后添加对象
-(void) addObject : (id) anObject;
![](https://img.haomeiwen.com/i841337/0c94d8a3cc3679d9.png)
现在创建一个学生类定义属性,声明一个便利初始化函数
用学生类创建对象,并存入数组中
![](https://img.haomeiwen.com/i841337/e508d8f091e67d1c.png)
![](https://img.haomeiwen.com/i841337/bf3a908afc37366b.png)
![](https://img.haomeiwen.com/i841337/45fd32579fd0933e.png)
在main函数中实例化对象,添加到数组中
![](https://img.haomeiwen.com/i841337/dfddb7488568188a.png)
可变数组删除对象
可以使用removeObjectAtIndex方法来删除指定所引出的对象
-(void) removeObjectAtIndex : (unsigned long)index;
![](https://img.haomeiwen.com/i841337/5f9ff69b80f318d0.png)
![](https://img.haomeiwen.com/i841337/ef0b154d2964e682.png)
可变数组的其他操作
用指定索引出插入对象
![](https://img.haomeiwen.com/i841337/bc2e6743506c4643.png)
替换指定位置处的对象
-(void)replaceObjectAtIndex:(NSUInteger) withObject:(id)
![](https://img.haomeiwen.com/i841337/a3f33bd8a73ac171.png)
数组的排序
为可变数组排序,常用三种方式
-使用sortUsingComparator方法
-使用sortUsingDescriptors方法
-使用sortUsingSelector方法
![](https://img.haomeiwen.com/i841337/e624c5462a619275.png)
![](https://img.haomeiwen.com/i841337/925225cfd22040c4.png)
快速枚举
//使用id数据类型
for(id obj in array){
NSLog(@“%@\n”,obj);
}
//使用静态类型
for(NSString * str in array){
NSLog(@“%@\n”,str);
}
![](https://img.haomeiwen.com/i841337/bc2e6743506c4643.png)
NSDictionary字典
-字典是关键字和其定义所构成的集合
-NSDictionary在给定的关键字下存储一个数据,该数据可以是任何-Objective-C类型
-可以通过这个关键字来访问这个相应的数据
-使用dictionaryWithObjectsAndKeys方法来创建一个字典
-(id) dictionaryWithObjectsAndKeys:(id) obj,…;
![](https://img.haomeiwen.com/i841337/bd461bf4001d4280.png)
字典是一个无序的集合
![](https://img.haomeiwen.com/i841337/7a4d71af7f871845.png)
使用objectForKey方法获取字典中的值
-(id) objectForKey : (id) aKey;
![](https://img.haomeiwen.com/i841337/87c88fec94d66212.png)
![](https://img.haomeiwen.com/i841337/1c182a274b900627.png)
字典中遍历
-字典无法直接使用索引、枚举器或快速枚举来遍历字典中的元素
-字典包含一个方法allKeys,返回所有的Key所构成的一个NSArray
-可以遍历这个NSArray得到每一个Key,然后再根据Key得到相应的数据
-不可变字典和可变字典遍历方式一致
NSSet类
使用NSSET类
NSNumbers创建和使用
NSNull
结合中不能直接放入nil,
网友评论