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存储每个数组值。它比枚举器语法更加简洁快捷。
|
请发表评论