iOS开发之NSArray/NSDictionay使用简介
(2.) 数组:
Cocoa 使用 NSArray 表示数组,但是它不能存储基本数据类型、enum、struct、nil,只能存
储 Objective-C 的对象。
例:
NSArray *array=[NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];
//从这个类方法 arrayWithObjects 的定义可以看出,它使用 nil 表示数组元素结束,这也是
nil 不能存储在 NSArray 中的原因。
int count=[array count];//获取数组元素的格式,本例中为 3。
int i;
for(i=0; i<count;i++){
NSLog(@"%@",[array objectAtIndex: i]);
//遍历数组元素,objectAtIndex 方法获取指定索引位置的元素。 }
NSString *s=@"iPhone,Android,Windows Phone 7";
array=[s componentsSeparatedByString: @","];//按照一个字符串将字符串拆分为数组。
s=[array componentsJoinedByString: @" "];//按照一个字符串将数组连接为字符串。
NSLog(s);
同理,NSMutableArray 为长度可变的数组,相当于 JAVA 中的 List。
例:
NSMutableArray *mArray=[NSMutableArray arrayWithCapacity: 10];
[mArray addObject: @"Apple"];//添加数组元素
[mArray addObject: @"Google"];
[mArray addObject: @"MicroSoft"];
[mArray removeObjectAtIndex: 2];//移除指定索引位置的数组元素
s=[mArray componentsJoinedByString: @","];//拼接数组元素为字符串 NSLog(s);
NSEnumerator *e = [mArray objectEnumerator];
//获取数组的迭代器,相当于 JAVA 中的 Iterator,reserveObjectEnumerator 用于获取反转
之后的数组迭代器。与 JAVA 一致的地方是你在使用迭代器时,不能对数组进行添加、删除
操作。
id obj;
while(obj=[e nextObject]){ NSLog(@"%@",obj);
}
printf("------------------------------\n");
/*
for(NSString *ms in mArray){
NSLog(@"%@",ms); }
*/
//for-each 快速枚举为 Objective-C 2.0 的新特性,Windows 上的 GNUStep 并不支持。
(3.) 字典(哈希表):
NSDictionary 用于存储 key-value 的数据结构,与 JAVA 中的 Map 类似。
例:
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys: @"Apple", @"A", @"Google",
@"G", nil];
//dictionaryWithObjectAndKeys 后的可变参数,每两个为一个 value-key,以 nil 表示结束。
NSLog(@"%@",[dic objectForKey: @"A"]);//按照指定的 key 查询 value
同样的有 NSMutableDictionary 表示长度可变的字典。
例:
NSMutableDictionary *mDic=[NSMutableDictionary dictionaryWithCapacity: 10];
[mDic setObject: @"Apple" forKey: @"A"];//添加 value-key 对
[mDic setObject: @"Google" forKey: @"G"];
[mDic setObject: @"Windows Phone 7" forKey: @"W"];
[mDic removeObjectForKey: @"W"];//移除指定 key 的 value
/*
for(id key in mDic){
NSLog(@"%@ : %@",key,[mDic objectForKey: key]);
} */
//快速迭代的 for-each 循环
NSEnumerator *keyEnum=[mDic keyEnumerator];//获得 key 的枚举器 id key;
while(key=[keyEnum nextObject]){
NSLog(@"%@ : %@",key,[mDic objectForKey: key]);
}
#import <Foundation/Foundation.h>
@interface Person: NSObject{ int pid;
NSString *name;
}
-(void) setPid: (int) pid;
-(void) setName: (NSString*) name;
-(int) pid;
-(NSString*) name;
@end
@implementation Person -(void) setPid: (int) p{
pid=p; }
-(void) setName: (NSString*) n{ [n retain];
[name release];
name=n; }
-(int) pid{
return pid;
}
-(NSString*) name{
return name;
}
- (NSUInteger) hash{
return pid+[name hash];
}
-(BOOL) isEqual: (id) p{
if(pid==[p pid]&&[name isEqualToString: [p name]]){
return YES; }else{
return NO;
} }
-(void) dealloc{
[name release];
[super dealloc]; @end
int main (int argc , const char * argv[]){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Person *person1=[[Person alloc] init];
[person1 setPid: 1];
[person1 setName: @"Name1"];
Person *person2=[[Person alloc] init];
[person2 setPid: 1];
[person2 setName: @"Name1"];
Person *person3=[[Person alloc] init];
[person3 setPid: 3];
[person3 setName: @"Name3"];
NSSet *set=[NSSet setWithObjects: person1, person2, person3, nil];
NSEnumerator *e=[set objectEnumerator];
Person *person;
while(person=[e nextObject]){
NSLog(@"%d",[person pid]);
}
[pool release];
return 0;
}

浙公网安备 33010602011771号