集合:NSArray、NSMutableArray、NSDictionary、NSMutableDictionary、NSSet、NSMutableSet使用
阿新 • • 發佈:2019-01-26
/*本文介紹了:NSArray(有序的集合,儲存的元素在一個整塊的記憶體中並按序排列)、
NSMutableArray、
NSDictionary(鍵值對映)、
NSMutableDictionary、
NSSet(無序的集合,雜湊儲存)、
NSMutableSet, 類方法參見官方API*/
//一、陣列 NSArray // 1‘建立陣列 NSArray *array = [[NSArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four",nil]; //2、-(unsigned) count陣列所包含物件個數 NSLog(@"self.dataArray cound:%lu", [array count]); //3、- (id) objectAtIndex: (unsigned int) index;獲取指定索引處的物件; NSLog(@"self.dataArray cound 2:%@",[array objectAtIndex:2]); //切分陣列 //4、從字串分割到陣列- componentsSeparatedByString: NSString *string = [[NSString alloc] initWithString:@"One,Two,Three,Four"]; NSLog(@"string:%@",string); NSArray *array = [string componentsSeparatedByString:@","]; NSLog(@"array:%@",array); [string release]; //5、從數組合並元素到字串- componentsJoinedByString: NSArray *array = [[NSArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four",nil]; NSString *string = [array componentsJoinedByString:@","]; NSLog(@"string:%@",string); //二、從一個數組拷貝資料到另一陣列(可變數級)NSMutableArray //1、arrayWithArray: NSArray *array2 = [NSArray arrayWithObjects:@"a",@"b",@"c",nil]; NSLog(@"array:%@",array2); NSMutableArray *mutableArray = [[NSMutableArray alloc] init]; mutableArray = [NSMutableArray arrayWithArray:array2]; NSLog(@"MutableArray:%@",mutableArray); NSArray *array1 = [[NSArray alloc] init]; array1 = [NSArray arrayWithArray:array2]; NSLog(@"array1:%@",array1); //2、Copy NSMutableArray *newArray = [[NSMutableArray alloc] init]; NSArray *oldArray = [NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil]; NSLog(@"oldArray:%@",oldArray); id obj; for(int i = 0; i < [oldArray count]; i++) { obj = [[oldArray objectAtIndex:i] copy]; [newArray addObject: obj]; } NSLog(@"newArray:%@", newArray); [newArray release]; //3、快速列舉 NSMutableArray *newArray = [[NSMutableArray alloc] init]; NSArray *oldArray2 = [NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil]; NSLog(@"oldArray:%@", oldArray2); for(id obj in oldArray2) { [newArray addObject: obj]; } NSLog(@"newArray:%@", newArray); [newArray release]; //4、Deep copy NSArray *oldArray = [NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",nil]; NSLog(@"oldArray:%@",oldArray); NSMutableArray *newArray = [[NSMutableArray alloc] init]; newArray = (NSMutableArray*)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (CFPropertyListRef)oldArray, kCFPropertyListMutableContainers); NSLog(@"newArray:%@", newArray); [newArray release]; //5、Copy and sort NSArray *oldArray = [NSArray arrayWithObjects:@"b",@"a",@"e",@"d",@"c",@"f",@"h",@"g",nil]; NSLog(@"oldArray:%@",oldArray); NSMutableArray *newArray = [[NSMutableArray alloc] init]; NSEnumerator *enumerator = [oldArray objectEnumerator]; id obj; while(obj = [enumerator nextObject]) { [newArray addObject: obj]; } [newArray sortUsingSelector:@selector(compare:)]; NSLog(@"newArray:%@", newArray); [newArray release]; //6、給陣列分配容量 NSArray *array = [NSMutableArray arrayWithCapacity:20]; //7、在陣列末尾新增物件,- (void) addObject: (id) anObject; NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; [array addObject:@"Four"]; NSLog(@"array:%@",array); //8、刪除陣列中指定索引處物件,-(void) removeObjectAtIndex: (unsigned) index; NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; [array removeObjectAtIndex:1]; NSLog(@"array:%@",array); //9、陣列列舉,- (NSEnumerator *)objectEnumerator;從前向後 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; NSEnumerator *enumerator = [array objectEnumerator]; id thingie; while (thingie = [enumerator nextObject]) { NSLog(@"thingie:%@",thingie); } //10、從後向前,-(NSEnumerator *)reverseObjectEnumerator; NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; NSEnumerator *enumerator = [array reverseObjectEnumerator]; id object; while (object = [enumerator nextObject]) { NSLog(@"object:%@",object); } //11、快速列舉 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; for(NSString *string in array) { NSLog(@"string:%@",string); } //三、字典 NSDictionary,key/value 方式,對應於Java中Map //1、建立字典,- (id) initWithObjectsAndKeys; NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"One",@"1",@"Two",@"2",@"Three",@"3",nil]; NSString *string = [dictionary objectForKey:@"One"]; NSLog(@"string:%@",string); NSLog(@"dictionary:%@",dictionary); [dictionary release]; //四、可變字典 NSMutableDictionary //1、建立可變字典 NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; [dictionary setObject:@"One" forKey:@"1"]; [dictionary setObject:@"Two" forKey:@"2"]; [dictionary setObject:@"Three" forKey:@"3"]; [dictionary setObject:@"Four" forKey:@"4"]; NSLog(@"dictionary:%@",dictionary); //2、刪除指定的字典 [dictionary removeObjectForKey:@"3"]; NSLog(@"dictionary:%@",dictionary); //3、對任何物件進行包裝NSValue, 將NSRect放入NSArray中,將NSRect放入NSArray中 NSMutableArray *array = [[NSMutableArray alloc] init]; CGRect rect = CGRectMake(0, 0, 320, 480); NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)]; [array addObject:value]; NSLog(@"array:%@",array); //4、從Array中提取 value = [array objectAtIndex:0]; [value getValue:&rect]; NSLog(@"value:%@",value); //5、從目錄搜尋副檔名為jpg的檔案 NSString *home = @"../Users/"; NSFileManager *fileManager = [NSFileManager defaultManager]; NSDirectoryEnumerator *direnum = [fileManager enumeratorAtPath: home]; NSMutableArray *files = [[NSMutableArray alloc] init]; NSString *filename; while (filename = [direnum nextObject]) { if([[filename pathExtension] hasSuffix:@"jpg"]){ [files addObject:filename]; } } //快速列舉 for(NSString *filename in direnum){ if([[filename pathExtension] isEqualToString:@"jpg"]){ [files addObject:filename]; } } NSLog(@"files:%@",files); //6、列舉 NSEnumerator *filenum = [files objectEnumerator]; while (filename = [filenum nextObject]) { NSLog(@"filename:%@",filename); } //快速列舉 for(id object in files){ NSLog(@"object:%@",object); } //五、NSSet //1、NSSet的使用 /* [NSSet setWithSet:(NSSet *)set]; 用另外一個set物件構造 [NSSet setWithArray:(NSArray *)array];用陣列構造 [NSSet setWithObjects:...]:建立集合物件,並且初始化集合中的數值,結尾必需使用nil標誌。 [set count] ; 得到這個結合物件的長度。 [set containsObject:...]: 判斷這個集合中是否存在傳入的物件,返回Bool值。 [set objectEnumerator]: 將集合放入迭代器。 [enumerator nextObject]:得到迭代器中的下一個節點資料,使用while遍歷這個迭代器,方可遍歷集合物件中的物件。 [set isEqualToSet:objset]:判斷兩個集合是否完全相等,返回Bool值。 [set isSubsetOfSet:objset]:判斷集合中的所有資料是否都相等與objeset集合中,返回Bool值。 [set allObjects]; */ NSSet *set = [NSSet setWithObjects:@"25",@"age",@"張三",@"name",@"男",nil]; NSSet *set1 = [NSSet setWithObjects:@"25",@"age",@"張三",@"name",@"男",@"性別",nil]; NSLog(@"set count:%lu", [set count]); //判斷是否含有age字串 if([set containsObject:@"age"]) { NSLog(@"set包含age"); } //判斷set 是否等於set1 if ([set isEqualToSet:set1]) { NSLog(@"set 等於 set1"); } //判斷set是否是否是set1的子集合 if ([set isSubsetOfSet:set1]) { NSLog(@"set isSubsetOfSet set1"); } //獲取所有set物件 NSArray *array = [set allObjects]; NSLog(@"array:%@", array); //迭代遍歷 NSEnumerator *enumerator = [set objectEnumerator]; for (NSObject *object in enumerator) { NSLog(@"set1裡的物件:%@", object); } //六、NSMutableSet的使用 /* NSMutableSet繼承NSSet,它可以使用NSSet的方法。 [NSMutableSet setWithCapacity:6]:建立可變集合物件,並且初始化長度為6。 [set addObject: obj] : 向集合中動態的新增物件。 [set removeObject:obj]:刪除集合中的一個物件。 [set removeAllObjects]:刪除集合中的所有物件。 [set unionSet:obj]:向集合中新增一個obj集合的所有資料。 [set minusSet:obj]:向集合中刪除一個obj集合的所有資料。 [set intersectSet]:向集合中刪除一個不包含obj集合的所有資料。 */ //集合NSMutableSet中不能存在重複的物件 NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3", nil]; NSMutableSet *set2 = [[NSMutableSet alloc] initWithObjects:@"1",@"5",@"6", nil]; [set1 unionSet:set2]; //取並集1,2,3,5,6 [set1 intersectSet:set2]; //取交集1 [set1 minusSet:set2]; //取差集2,3,5,6