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;

 
posted @ 2012-11-21 22:03  小、  阅读(407)  评论(0)    收藏  举报