OC之集合家族
2015-08-10 21:27
453 查看
原文出处:http://blog.csdn.net/mobailwang/article/details/7454441
Cocoa提供了很多集合类,来提供我们使用,下面就对其中的对象的使用说明
NSArray
NSArray是一个Cocoa类,用来存储对象的有序列表,你可以在其中放入任意类型的对象:NSString或者是其他你想要存储的对象,但只能是存储Objective-C的对象,而不能存储C语言中的基本数据类型,如int、float、enum、struct,或者NSArray中的随机指针,同时也不能在NSArray中存储nil(对象的零值或者NULL值)。只要有了一个NSArray,就可以通过各种方式操作它,例如让某个对象的实例对象指向这个数组,将该数组当作参数进行传递,获取数据中所存对象的个数,根据索引来得到相应的对象,查找数组中的对象,遍历数组等等。arrayWithObjects:创建一个新的NSArray,发送一个以逗号分隔的对象列表,可在列表结尾添加nil代表列表结束,这也是为什么数组不能存储nil的原因之一。
NSArray *array;
array = [NSArray arrayWithObjects:
@“one”, @“two”,@“three”,nil];
通过NSArray的count:方法可以得到数组的个数;
- (unsigned)count;
也可以如下所示获取特定索引处的对象:
(id) objectAtIndex: (unsigned int) index;
例:
int i;
for(int i=0; i < [array count]; i++){
NSLog(@“index %d has %”, i, [array objectAtIndex: i]);
}
输出结果:略。
如果引用的索引计数大于数组里面对象个数,运行时就会输出错误。
可变数组
NSArray与NSString一样,创建的是一个不可变的。一旦你用了特定数量的对象创建了一个数组,那么它就固定下来了:既不能添加任何元素,也不能删除任何元素。当然,数组里面的对象是可以改变的,数组自身是不会改变的。因此引起一个新的可变数组NSMutableArray,这样就可以随意的添加或者删除数组中的对象。
常用的方法如下:
arrayWithCapacity:来创建新的可变数组:
+ (id) arrayWithCapacity: (unsigned) numitems;
例:
NSMutableArray *array;
array = [NSMutableArray arrayWithCapacity: 17];
addObject:在数组末尾添加对象
- (void)addObject:(id)anObject;
removeObjectAtIndex:删除特定索引处的对象。
- (void) removeObjectAtIndex: (unsigned) index;
枚举
如果要编写一个从0到[array count]的循环来读取每个索引处的对象,也可以使用NSEnumerator,它是Cocoa用来描述这种集合迭代运算的方式。要想使用NSEnumerator,需要通过objectEnumerator向数组请求枚举器:- [NSEnumerator *]objectEnumerator;
你可以按如下方式使用这个方法:
[NSEnumerator *enumerator;
enumerator = [array objectEnumerator];
如果你想要从后向前浏览 ,还可以使用reverseObjectEnumerator。
在获得枚举器之后,可以开始一个while循环,每次循环都向这个枚举器请求它的nextObject(下一个对象):
- (id) nextObject;
当nextObject返回nil值时,循环结束,这也是不能在数组中存储nil值的另一个原因:我们没有办法判断nil是存储在数组中的数值还是代表结束的标志。
整个循环如下:
NSEnumerator *enumerator;
enumerator = [array objectEnumerator];
id thingie;
while (thingie = [enumerator nextObject])
{
NSLog(@“I found %@”,thingie);
}
备注及疑问:如果要使用枚举器,有一个问题,就是不能用增加或者删除这类的方法去操作这个可变数组,要不然的话,就会出现问题。这是一个问题,可以试试!
快速枚举
for (NSString *string in array){NSLog(@“I found %@”,string);
}
这样,遍历数组就有三种方式了,通过索引、使用NSEnumerator和快速枚举。
NSDictionary
NSDictionary在给定的关键字下存储一个数值(可以是任何类型的对象)。然后可以用这个关键字来查找相应的数值。NSDictionary与NSArray和NSString一样是不可变的对象,但是NSMutableDictionary类允许你随意添加和删除字典元素。在创建新的NSDictionary时,就要提供该字典的全部对象和关键字。dictionaryWithObjectsAndKeys:创建字典。
+ (id) dictionaryWithObjectsAndKeys:(id)firstObject,(NSString)firstKey,,,,;
Dictionary接受对象和关键字交替存储的系统,以nil值为终止符。
例:
Tire *t1 = [Tire new];
Tire *t2 = [Tire new];
Tire *t3 = [Tire new];
Tire *t4 = [Tire new];
NSDictionary *tires;
tires = [NSDictionary dictionaryWithObjectsAndKeys: t1,@”front-left”, t2, @”front-right”, t3, @”back-left”, t4, @”back-right”, nil];
objectForKey:来获取字典中的值,向方法传递之前用来存储该值的关键字。
- (id) objectForKey: (id) aKey;
所以,要从字典中找到其中的一个对象,可以这样写:
Tire *tire = [tires objectForKey: @” back-left”];
如果根据关键字查不到对象,那么objectForKey:会返回nil值。
要创建新的NUMutableDictionary对象,向类NSMutableDictionary发送dictionary消息。你也可以使用dictionaryWithCapacity:方法来创建新的可变字典并且告诉最终大小。
+ (id) dictionaryWithCapacity: (unsigned int) numitems;
setObject:forkey:方法给字典添加元素:
- (void) setObject: (id) anObject forKey: (id) aKey;
下面是另一种创建存储轮胎的字典的方法:
NSMutableDictionary *tires;
tires = [NSMutableDictionary dictionay];
[tires setObject: t1 forKey:@”front-left”];
注意:如果对字典中已有的关键字使用setObject:forKey:,那么这个方法将会用新值替换原有的数值。如果你想在可变字典删除一个关键字,可使用removeObjectForKey:方法:
- (void) removeObjectForKey:(id) aKey;
例:[tires removeObjectForKey:@”back-left”];
相关文章推荐
- LeetCode之Recover Binary Search Tree
- Day2_CSS_CSS语法及HTML结合
- SpringMVC 集成JSR303数据校验
- uva 524 回溯法
- 杭电ACM求数列的和
- c# 笔试题及参考答案大全
- HDU 4169 Wealthy Family 优先队列
- ***POJ 2152 - Fire(树形DP)
- git常用命令
- 数据同步平台——FTP
- YXBBS 2.3论坛系统后台拿shell 转自红黑联盟
- 运行hadoop自带的案例—wordcount
- OC之NSString
- 大数加法
- POJ 1952 BUY LOW, BUY LOWER
- Android JSON 解析库的使用 - Gson 和 fast-json
- 功夫。
- 浅谈OFBiz之权限设计
- JavaScricpt面向对象功能的理论基础
- 约瑟夫环问题 循环链表