Objective-C边学边记-8:Foundation Kit快速教程之 数组、枚举

4.集合
集合类:NSArray 、NSDictionary
1)NSArray
NSArray是Cocoa的一个类,用来存储对象的有序列表,可以在NSArray中放入任意类型的对象。
NSArray中只能存储Objective-C的对象,而不能存储C语言中的基本数据类型,如int,float,enum,struct,或者NSArray中的随机指针。同时,也不能在NSArray中存储nil(对象的零值或NULL值)。

 
  
1 #import < Foundation / Foundation.h >
2
3
4
5   int main ( int argc, const char * argv[]) {
6 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
7
8 // 创建数组 arrayWithObjects:
9   NSArray * array;
10 array = [NSArray arrayWithObjects:
11 @" one " , @" two " , @" three " , nil]; // 列表结尾添加nil表示列表结束
12
13 // 获取对象个数 count:
14   NSLog( @" the count of array is: %d " ,
15 [array count]);
16
17 // 获取特定索引处的对象 objectAtIndex:
18   int i;
19 for (i = 0 ; i < [array count]; i ++ )
20 {
21 NSLog( @" index %d has %@ " ,
22 i,[array objectAtIndex:i]);
23 }
24
25 // 将字符串切分成数组 componentsSeparatedByString:
26   NSString * str = @" oop : ack : elf : com : cn : net " ;
27 NSArray * arr = [str componentsSeparatedByString: @" : " ];
28 NSLog( @" str is : %@ " ,str);
29 NSLog( @" arr is : " );
30 for (NSString * s in arr)
31 {
32 NSLog( @" \ " % @\ "" ,s);
33 }
34 // 合并数组并创建字符串 componentsJoinedByString:
35   NSLog( @" 合并数组到NSArray. " );
36 str = [arr componentsJoinedByString: @" , " ];
37 NSLog( @" str is : %@ " ,str);
38 NSLog( @" arr is : " );
39 for (NSString * s in arr)
40 {
41 NSLog( @" \ " % @\ "" ,s);
42 }
43
44
45 [pool drain];
46 return 0 ;
47 }
48
49
50  

 


2)可变数组:
与NSString一样,一旦创建NSArray它就固定下来了,不能添加或删除其中的任何元素。当然,包含在数组中的对象是可以改变的,当数组对象本身一直都不会改变。
可变数组可以使用NSMutableArray
Example:

 
  
1 //
2 // MyClass.h
3 // FoundationKit4
4 //
5 // Created by Elf Sundae on 10/22/10.
6 // Copyright 2010 Control-Strength. All rights reserved.
7 //
8
9 #import < Cocoa / Cocoa.h >
10
11
12 @interface MyClass : NSObject
13 {
14 NSString * firstName;
15 NSString * lastName;
16 }
17
18
19 - ( void ) setFirstName:(NSString * )m_firstName;
20 - (NSString * ) firstName;
21
22 - ( void ) setLastName: (NSString * ) m_lastName;
23 - (NSString * ) lastName;
24
25 - (NSString * ) fullName;
26
27 @end

 

 
  
1 //
2 // MyClass.m
3 // FoundationKit4
4 //
5 // Created by Elf Sundae on 10/22/10.
6 // Copyright 2010 Control-Strength. All rights reserved.
7 //
8
9 #import " MyClass.h "
10
11
12 @implementation MyClass
13
14 - ( void ) setFirstName:(NSString * )m_firstName{
15
16 firstName = m_firstName;
17 }
18 - (NSString * ) firstName{
19 return firstName;
20 }
21
22 - ( void ) setLastName: (NSString * ) m_lastName{
23 lastName = m_lastName;
24 }
25 - (NSString * ) lastName{
26 return lastName;
27 }
28
29
30 - (NSString * ) fullName
31 {
32 if (firstName == nil || lastName == nil) {
33 return @" No Name found. " ;
34 } else {
35 return [NSString stringWithFormat: @" %@ %@ " ,
36 firstName,lastName];
37 }
38
39 }
40 @end

 

 
  
1 //
2 // FoundationKit4.m
3 //
4
5 #import < Foundation / Foundation.h >
6 #import " MyClass.h "
7
8 int main ( int argc, const char * argv[]) {
9 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
10
11 // 创建可变数组
12 NSMutableArray * array;
13 array = [NSMutableArray arrayWithCapacity: 20 ];
14 // 添加对象: addObject
15 int i;
16 for (i = 0 ; i < 4 ; i ++ )
17 {
18 MyClass * myClass = [MyClass new ];
19 [array addObject:myClass];
20 }
21 [[array objectAtIndex: 0 ] setFirstName: @" Elf " ];
22 [[array objectAtIndex: 0 ] setLastName: @" Sundae " ];
23
24 [[array objectAtIndex: 3 ] setFirstName: @" Joe " ];
25 [[array objectAtIndex: 3 ] setLastName: @" Gates " ];
26
27
28 for (MyClass * my in array)
29 {
30 NSLog( @" %@ " ,[my fullName]);
31 }
32
33 // 删除对象:removeObjectAtIndex:
34 NSLog( @" 删除第二个对象后: " );
35 [array removeObjectAtIndex: 1 ];
36
37 for (MyClass * my in array)
38 {
39 NSLog( @" %@ " ,[my fullName]);
40 }
41
42 [pool drain];
43 return 0 ;
44 }
45
46

 

3)枚举 (NSEnumerator)
遍历数组每个索引处的对象,你可以编写一个0到[array count]的循环,而NSEnumerator用来描述这种集合迭代运算的方式。
通过objectEnumerator向数组请求枚举器,如果想从后向前浏览集合,可使用reverseObjectEnumerator方法。在获得枚举器后,可以开始一个while循环,每次循环都向这个枚举器请求它的下一个对象:nextObject。nextObject返回nil值时,循环结束。示例如下:

 
  
1 // NSEnumerator示例
2 NSEnumerator * enumerator;
3 enumerator = [array objectEnumerator];
4 id thing;
5 while (thing = [enumerator nextObject]) {
6 NSLog( @" I found %@ " ,thing);
7 }

 

 

对于可变数组进行枚举操作时,主要不要添加或删除数组中的对象。


4)快速枚举
Objective-C2.0支持快速枚举:如

 
  
1 for (NSString * string in array)
2 {
3 NSLog( @" I found %@ " , string );
4 }
5
6

 

这个循环将会遍历数组中的每个元素,并且用变量string存储每个数组值。它比枚举器语法更加简洁快捷。

 

转载于:https://www.cnblogs.com/elfsundae/archive/2010/10/25/1860051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值