Objective-C集合(二)——集合家族
5887 ワード
一.家族を集める
1.NSArray
NSArrayは、オブジェクトを格納するためのシーケンステーブル付きCocoaクラスです.
制限:a.Objective-Cのオブジェクトのみを格納できますが、int、float、enum、struct、またはNSArrayのランダムポインタなどのC言語の基本データ型は格納できません.
b.NSArrayにnil(オブジェクトのゼロ値またはNULL値)を格納できません.
// arrayWithObjects NSArray, ,
// nil ( nil )
NSArray *array;
array = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];
//
- (unsigned) count;
//
- (id)objectAtIndex: (unsigned int) index;
2.NSMutableArray:可変配列
// , , 。
+ (id) arrayWithCapactity: (unsigned int) numItems;
//
- (void) addObject: (id) anObject
//
- (void)removeObjectAtIndex:(unsigned) index;
3.NSEnumerator(列挙)
//
- (NSEnumerator *) objectNSEnumeratort;
NSEnumerator *anumerator;
enumerator = [array objectNSEnumerator];
//
- (void)reverseObjectEnumerator;
// while , ;
- (id) nextObject;
nextObject nil ,
:
NSenumerator *enumerator;
enumerator = [array objectEnumerator];
id thingie;
// ,
while(thingie == [enumerator nextObject]){
NSLog(@"I found %@",thingie);
}
4.クイック列挙
for(NSString *string in array){
NSLog(@"I found %@",string);
}
5.NSDictionary(ハッシュ構造)
(1)NSDictionary
//
+ (id)dicationaryWithObjectsAndKeys:
(id)firstObject,...;
//
- (id) objectForKey: (id) aKey;
:
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]
Tire *tire =[tires objectForKey: @"back-right"];
(2)NSDictionaryは可変ではなく、NSMutableDictionaryは任意に要素を追加または削除することができる.
// NSMutableDictionary dictionary , dictionaryWithCapacity:
//
+ (id) dicationaryWithCapacity: (unsigned int) numItems;// ,
//
- (void) setObject: (id) anObject
forKey: (id) aKey;
//
- (void) removeObjectForKey:(id)aKey;
基本データ型パッケージクラス
1.NSNumber
NSArrayとNSDictionaryはオブジェクトのみを格納し、基本的なタイプのデータは直接格納できませんが、オブジェクトでカプセル化してコレクションに追加できます.
CocoaはNSNumberクラスを提供して基本データ型をパッケージ化(すなわちオブジェクト形式で実装)する
a.いくつかの方法の例:
+ (NSNumber *) numberWithChar : (Char)value;
+ (NSNumber *) numberWithInt : (Int)value;
+ (NSNumber *) numberWithFloat : (Float)value;
+ (NSNumber *) numberWithBool: (Bool)value;
b.Objective-cでは自動梱包はサポートされていません
NSNumber *number;
number = [NSNumber numberWithInd:42];
[array addObject: number];
[dictionary setObject: number forkey: @"Bork"];
C.基本タイプのデータをNSNumberにカプセル化すれば、次の方法で再取得できます.
- (Char) charValue;
- (Int) intValue;
- (Float) floatValue;
- (Bool) boolValue;
- (NSString *) stringValue
2.NSValue
NSNumberはNSValueのサブクラスであり、NSValueは任意の値をパッケージすることができる.
+ (NSValue *) valueWithBytes: (const void *) value
objCType: (const void *) type;
クラスメソッドを使用して新しいNSValueを作成できます.
3.NSNull
nilは集合の終わりを表すため、近NSArray,NSDictionaryにnilを格納することはできません.
NULL値は次の方法で指定します.
+ (NSNull *) null;
例:
[contact setObject: [NSNull null] forKey:@"home fax machine"];
アクセス方法
id homefax;
homefax = [contact objectForKey: @"home fax machine"];
if(homefax == [NSNull null]){
//no fax machine......
}
二.集合総合運用小例検索ファイル
int main(int argc, Const char *argc[]){
//
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
// fileManager
NSFileManager *defaultManager;
defaultManager = [NSFileManager defaultManager];
//
NSString *home;
home = [@"~",stringByExpandingTildeInPath];
//
NSDirectoryEnumerator *direnum;
direnum = [manager enumeratorAtPath: home];
//
NSMutableArray *files;
files = [NSMutableArray arrayWithCapacity: 42];
// jpg
NSString *filename;
while(filename = [direnum nextObject]){
if([[filename pathExtension] isEqualTo: @".jpg"]){
[files addObject: fillname];
}
}
//
NSEumerator *filenum;
filenum = [files objectEnumerator];
while(filename = [filenum nextObject]){
NSLog(@"%@",filename);
}
[pool drain];
return 0;
}
クイック反復メソッド
int main(int argc, Const char *argc[]){
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
NSFileManager *defaultManager;
defaultManager = [NSFileManager defaultManager];
NSString *home;
home=[@"~",stringExpandingTildeInPath];
NSMutableArray *files;
files = [NSMutableArray arrayWithCapacity: 42];
for(NSString *filename in [defaultManager enumeratorAtPath: home]){
if([[filename pathExtension] isEqualTo: @".jpg"]){
[files addObject filename];
}
}
for(NSString *filename in files){
NSLog(@"@",filename);
}
}