Foundation框架中的集合框架 NSNumber和NSString Foundation框架中的文件和目录 Foundation框架中的集合框架 内容概述 数组NSArray和NSMutableArray 集合NSSet和NSMutableSet 字典NSDictionary和NSMutableDictionary 13.1 数组NSArray和NSMutableArray NSArray是一个不可变数组,可以用来容纳多个有序对象的集合,NSMutableArray继承NSArray可以创建一个可变数组用来容纳多个有序对象。数组常用操作包括创建、查找、比较和排序等。 创建(初始化)数组。常用的初始化方法包括:+ (id)arrayWithObjects:(id)firstObj, ...传递一个对象列表参数,也可以通过一个已经存在的数组进行初始化+ (id)arrayWithArray:(NSArray )anArray,还可以通过直接赋值的方法NSArray array = @["A","B","C"]; // 直接赋值初始化 NSArray *array = @[@"A",@"B",@"C"]; // 使用已经存在的数组进行初始化 NSArray *array2 = [NSArray arrayWithArray:array]; // 使用对象集合进行初始化 NSArray *array3 = [NSArray arrayWithObjects:@"A",@"B",@"C", nil]; 查找数组中的对象。可以通过索引直接查找,也可以获得数组的大小,循环遍历查找。 // 获得某个索引位置的元素 NSString *obj = [array objectAtIndex:0]; NSLog(@"obj=%@",obj); // 判断是否包含某个元素 BOOL result = [array containsObject:@"B"]; if (result) { NSLog(@"contains"); }else{ NSLog(@"not contains"); } // 获得数组大小 NSUInteger count = [array count]; NSLog(@"count=%lu",count); // 遍历数组 for (int i=0; i<count; i++) { NSString *obj = [array objectAtIndex:i]; NSLog(@"obj=%@",obj); } // 遍历数组 for(NSString *str in array){ NSLog(@"str=%@",str); } 对数组中的元素进行排序,可以调用NSArray的- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr方法对数组进行排序,参数为一个block,用来指定比较规则。 // 排序 array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return obj1<obj2; }]; NSLog(@"%@",array); NSMutableArray继承NSArray可以创建一个可变数组,可以实现数组的添加、删除和替换等操作。下面代码实现了可变数组的初始化、添加、删除和替换的功能。 // 初始化 NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:20]; // 添加 [mArray addObject:@"A"]; [mArray addObject:@"B"]; [mArray addObject:@"C"]; for(NSString *str in mArray){ NSLog(@"str=%@",str); } // 删除 [mArray removeObjectAtIndex:1]; // 删除所有 //[mArray removeAllObjects]; // 删除最后一个 //[mArray removeLastObject]; // 替换 [mArray setObject:@"new object" atIndexedSubscript:1]; [mArray replaceObjectAtIndex:1 withObject:@"new object2"]; NSLog(@"%@",mArray); 13.2 集合NSSet和NSMutableSet NSSet是一个无序的不可变对象集合,NSMutableSet继承NSSet是一个可变无序集合。和NSArray相比NSSet集合中的元素是无序的并且和唯一的,而NSArray中的元素的有序且可以重复的。使用NSSet常用的操作包括初始化对象、集合的遍历、判断当前集合是否是某个集合的子集、判断当前集合是否是某个集合的交集等。 NSSet的初始化,可以使用一个NSArray初始化,也可以可使用存在的一个NSSet,还可以使用使用一个组对象。 // 使用数组初始化 NSArray *array = @[@"A",@"B",@"C"]; NSSet *set = [NSSet setWithArray:array]; NSLog(@"set=%@",set); // 使用存在的数组初始化 NSSet *set1 = [[NSSet alloc]initWithSet:set]; // 使用一组对象 NSSet *set2 = [NSSet setWithObjects:@"item1",@"item2",@"item3",nil]; 可以使用count方法计数集合中元素的个数,可以使用增强型for循环来遍历集合。 // 个数 NSUInteger count = [set count]; NSLog(@"count=%lu",count); // 遍历 for(NSString *item in set){ NSLog(@"item=%@",item); } 可以使用anyObject方法获得集合中任意一个元素,也可以containsObject方法判断当前集合是否包含该某个元素。 // 获得任意一个对象 NSString *anyObj = [set anyObject]; NSLog(@"anyObj=%@",anyObj); // 判断是否包含某个对象 BOOL result = [set containsObject:@"A"]; if (result) { NSLog(@"contains"); }else{ NSLog(@"not contains"); } 可以使用isSubsetOfSet方法判断两个集合的子集关系,使用intersectsSet方法判断两个集合的交集关系。 // 判断是否是某个集合的子集 NSSet *set11 = [NSSet setWithObjects:@"A",@"B",@"C",@"C", nil]; NSSet *set12 = [NSSet setWithObjects:@"B",@"C", nil]; result = [set12 isSubsetOfSet:set11]; if (result) { NSLog(@"set2 is subset of set1"); }else{ NSLog(@"set2 is not subset of set1"); } // 判断是否是交集 result = [set12 intersectsSet:set11]; if (result) { NSLog(@"set12 is intersects of set11"); }else{ NSLog(@"set12 is not intersects of set11"); } NSMuableSet继承NSSet,该集合是可变的,可以实现元素的添加、删除、替换等操作。下面就针对这些方法加以演示。 NSMutableSet的初始化。通常使用+ (id)setWithCapacity:(NSUInteger)numItems方法初始化集合。根据numItems参数分配内存大小。 NSMutableSet *mSet = [NSMutableSet setWithCapacity:5]; 可以向集合中添加元素,也可以删除某个元素,或删除所有元素。 // 添加对象 [mSet addObject:@"A"]; [mSet addObject:@"B"]; [mSet addObject:@"C"]; [mSet addObject:@"C"]; NSLog(@"mSet=%@",mSet); // 删除对象 [mSet removeObject:@"B"]; NSLog(@"mSet=%@",mSet); // 删除所有元素 [mSet removeAllObjects]; 可以通过unionSet方法求两个集合的并集,intersectSet求两个集合交集,minusSet第一个集合减去第二个集合。 // 求子、交、并集 NSMutableSet *set1 = [NSMutableSet setWithCapacity:5]; [set1 addObject:@"A"]; [set1 addObject:@"B"]; [set1 addObject:@"C"]; NSMutableSet *set2 = [NSMutableSet setWithCapacity:5]; [set2 addObject:@"B"]; [set2 addObject:@"C"]; [set2 addObject:@"D"]; // 并集 //[set1 unionSet:set2]; NSLog(@"set1=%@",set1); // 交集 //[set1 intersectSet:set2]; NSLog(@"set1=%@",set1); // set1 减 set2 [set1 minusSet:set2]; NSLog(@"set1=%@",set1); 13.3 字典NSDictionary和NSMutableDictionary NSDictionary是一个包含key-value键值对的集合,NSDictionary是一个不可变集合一旦创建不可修改大小。而NSMutableDictionary继承NSDictionary是可变集合,可以对集合中的元素进行添加或删除。 NSDictionary集合的操作包括,初始化、根据key获得value、获得集合大小、获得所有key及所有value和遍历集合等。 初始化NSDictionary,初始化方法包括直接赋值和+ (id)dictionaryWithObjects:(NSArray )objects forKeys:(NSArray )keys方法。 // 初始化1 NSDictionary *dic1 = @{@"first name": @"guo",@"last name": @"hongzhi",@"age":@"30"}; // 初始化2 NSArray *keys = @[@"k1",@"k2",@"k3"]; NSArray *values = @[@"v1",@"v2",@"v3"]; NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:values forKeys:key 最常用的方法是根据key获得value,使用- (id)objectForKey:(id)aKey方法。 // 根据key获得value NSLog(@"First name=%@",dic1[@"first name"]); NSLog(@"Last name=%@",dic1[@"last name"]); NSLog(@"Age=%@",dic1[@"age"]); 可以使用count方法计数集合大小,使用增强型for循环遍历集合。 // 计数 NSUInteger count = [dic2 count]; NSLog(@"count=%lu",count); // 遍历 for(NSString *key in dic2){ NSString *value = [dic2 objectForKey:key]; NSLog(@"%@,%@",key,value); } 也可以使用- (NSArray )allKeys方法和- (NSArray )allValues方法获得所有key或所有value。 // 获得所有keys NSArray *allKeys = [dic2 allKeys]; for(NSString *key in allKeys){ NSLog(@"%@",key); } // 所有values NSArray *allValues = [dic2 allValues]; for(NSString *value in allValues){ NSLog(@"%@",value); } NSMutableDictionary继承NSDictionary,是可变集合,可以对集合中的元素进行维护,例如,添加、删除等操作。对NSMutableDictionary集合的操作包括初始化、添加、删除和删除所有元素等操作。 初始化NSMutableDictionary,使用+ (id)dictionaryWithCapacity:(NSUInteger)numItems方法分配指定数量大小的内存。 NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:2]; 添加删除元素,使用- (void)setObject:(id)anObject forKey:(id < NSCopying >)aKey添加元素,使用 - (void)removeObjectForKey:(id)aKey方法删除元素,使用- (void)removeAllObjects方法删除所有元素。 // 初始化 NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:2]; // 添加 [dic setObject:@"value1" forKey:@"key1"]; [dic setObject:@"value2" forKey:@"key2"]; [dic setObject:@"value3" forKey:@"key3"]; [dic setObject:@"value4" forKey:@"key4"]; for(NSString *key in dic){ NSString *value = [dic objectForKey:key]; NSLog(@"%@,%@",key,value); } // 删除 [dic removeObjectForKey:@"key1"]; NSLog(@"-------------"); for(NSString *key in dic){ NSString *value = [dic objectForKey:key]; NSLog(@"%@,%@",key,value); } // 删除所有对象 [dic removeAllObjects]; NSNumber和NSString Foundation框架中的文件和目录