NSArray 用于对象有序集合(相当于是数组)
它有两个限制:
1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。
2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】
NSSet 用于对象无序集合
NSDictionary 用于键值映射 以上三种集合类是不可变的(一旦初始化后,不能再动态的增加或删除元素),如果需要用到可变集合,则需要用到下面几个类:
NSMutableArray
NSMutableSet
NSMutableDictionary
实例DEMO:
1:NSArray 初始化和遍历迭代
(1)NSArray的初始化 NSArray的便利初始化函数: -(id) initWithObjects : (id) firstObject, ....; NSArray的便利构造器: +(id) arrayWithObjects: (id) firstObject, ...; demo: //NSArray的便利初始化 NSArray *array1 = [[NSArray alloc] initWithObjects:@"aaa", @"bbb", @"ccc", nil]; //NSArray的便利构造器 NSArray *array2 = [NSArray arrayWithObjects:@"111", @"222", @"333", nil]; (2)获取数组元素的个数和数组的元素 //获取数组元素的个数和元素 int count = (int)[array1 count]; //获取相应索引的元素 id element = [array1 objectAtIndex:0]; NSLog(@"array1_count = %d, array[0] = %@", count, element); (3)迭代: //封装遍历数组的函数 void array_display(id array) { for (int i = 0 ; i < [array count]; i++) { id temp = [array objectAtIndex:i]; NSLog(@"%@", temp); } }
2:NSMutableArray初始化和遍历迭代
2.可变数组:NSMutableArray NSArray的容量是固定的,而NSMutableArray的容量是可变的,我们可以在NSMutableArray实例化的时候先初始化一个容量,不过这个容量不是固定的,不够的时候会自动增加。NSMutableArray是NSArray的子类,是对NSArray的一个扩充。 (1) NSMutableArray的初始化 NSMutableArray的便利初始化函数:-(id) initWithCapacity : (NSUInteger) numItems; NSMutableArray的便利构造器:+(id) arrayWithCapacity: (NSUInteger) numItems; demo: //NSMutableArray的便利初始化 NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:3]; //NSMutableArray的便利构造器 NSMutableArray *array4 = [NSMutableArray arrayWithCapacity:3]; (2)元素的添加和删除 增加元素: -(void) addObject: (id) anObject; --往数组的尾部添加元素 删除全部内容: -(void) removeAllObjects; 删除最后一个元素: -(void) removeLastObject; 通过索引删除元素: -(void) removeObjectAtIndex: (NSUInteger) index; 删除任意一个元素: -(void) removeObject : (id)object; demo: //初始化NSMutableArray NSMutableArray *array = [NSMutableArray arrayWithObjects:@"111", @"222", @"333", nil]; //添加元素 [array addObject:@"444"]; //移除元素 [array removeObject:@"111"]; //移除最后一个元素 [array removeLastObject]; //按照索引删除元素 [array removeObjectAtIndex:0]; array_display(array); 删除任意一个元素: -(void) removeObject : (id)object; //初始化NSMutableArray NSMutableArray *array = [NSMutableArray arrayWithObjects:@"111", @"222", @"333", nil]; //添加元素 [array addObject:@"444"]; //移除元素 [array removeObject:@"111"]; //移除最后一个元素 [array removeLastObject]; //按照索引删除元素 [array removeObjectAtIndex:0]; array_display(array);
3:数组遍历
(1)要通过NSEnumerator来遍历数组首先得通过-(NSEnumerator *) objectEnumerator来得到枚举器;通过枚举其中的nextObject来获取对象 emo:如下 //迭代遍历数组 //获取枚举器 NSEnumerator *enumerator = [array objectEnumerator]; //临时变量 id obj; while (obj = [enumerator nextObject]) { NSLog(@"%@", obj); } (2)快速遍历法,相当于PHP中的foreach的用法 for(id obj in array) { NSLog(@"%@", obj); }
4:字典
//不可变字典的初始化 NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil]; id value = [dictionay objectForKey:@"key1"]; NSLog(@"key1 => %@", value); //封装遍历字典的函数(字典的遍历方法是通过字典里的-(NSArray *)allKeys获取所有的key存入数组中然后通过遍历数组获取key对应的value,) void dictionary_display(id dictionay) { NSArray *keys = [dictionay allKeys]; for (id obj in keys) { NSLog(@"%@ => %@", obj, [dictionay objectForKey:obj]); } } //可变字典NSMutableDictionary 在使用可变字典NSMutableDictionary时可以先给可变字典初始化一个空间,如果不够的话会自动增加 给可变字典分配初始化空间: +(id) dictionaryWithCapacity : (NSUInteger) num; 给可变字典添加对象:-(void) setObject(id) obj forKey(id) aKey; 根据关键字删除对象:-(void) removeObjectForKey : (id) aKey; 删除字典中的所有数据: -(void) removeAllObjects; 代码如下: NSMutableDictionary *mulDictionary = [NSMutableDictionary dictionaryWithCapacity:3]; //添加值 [mulDictionary setObject:@"value1" forKey:@"key1"]; [mulDictionary setObject:@"value2" forKey:@"key2"]; [mulDictionary setObject:@"value3" forKey:@"key3"]; [mulDictionary setObject:@"value4" forKey:@"key4"]; //通过键删除值 [mulDictionary removeObjectForKey:@"key4"]; dictionary_display(mulDictionary);
5:set
1.不可变集合NSSet (1)NSSet的初始化和其他集合类一样也有其对应的便利初始化方法和便利构造器, 便利初始化方法:-(id) initWithObjects: (id) firstObject, ...; 便利构造器:+(id) setWithObjects: (id) firstObject, ...; (2)NSSet中也有-(NSUInteger) count 来获取元素的对象 (3) 获取集合中的元素 获取全部的集合元素,以数组的形式返回:-(NSArray *) allObjects; 随进获取集合中的元素:-(id) anyObject; (4)判断两个Set是否相同 : - (BOOL) isEqualToSet: (NSSet *) otherSet; (5)判断一个元素是否在本集合中 -(BOOL) member: (id) obj; //set集合的操作 //便利初始化函数 NSSet *set1 = [[NSSet alloc] initWithObjects:@"aa", @"bb", @"cc", @"dd", nil]; //便利构造器 NSSet *set2 = [NSSet setWithObjects:@"AA", @"BB", @"CC", nil]; //获取集合中元素的个数 int count = (int) [set1 count]; NSLog(@"set1里面的元素的个数为:%d", count); //遍历集合:把set集合转换为数组然后进行遍历 NSArray *setToArray = [set2 allObjects]; array_display(setToArray); //随机获取Set中元素 id element = [set1 anyObject]; NSLog(@"随机获取其中的值%@", element); //比较两个Set是否相等 if ([set1 isEqualToSet:set2] == NO) { NSLog(@"set1 != set2"); } //查看一个元素是否在一个set中 if ([set1 member:@"aa"]) { NSLog(@"aa 在set1中"); } 2、可变Set: NSMutableSet 1.可变集合的实例化和初始化 便利初始化函数: -(id) initWithCapacity :(NSUInteger) numItems; 便利构造器:+(id) setWithCapacity: (NSUInteger) numItems; 2.往可变集合中添加元素 -(void) addObject : (id) object; 3.删除集合中的对象 -(void) removeAllObjects; 删除所有的对象; -(void) removeObjects: (id) object 删除其中某一个对象; 实例: //便利初始化函数分配大小 NSMutableSet *mutableSet1 = [[NSMutableSet alloc] initWithCapacity:3]; NSMutableSet *mutableSet2 = [NSMutableSet setWithCapacity:3]; //添加元素 [mutableSet1 addObject:@"aaa"]; [mutableSet1 addObject:@"BBB"]; [mutableSet1 addObject:@"bbb"]; //删除元素 [mutableSet1 removeObject:@"BBB"]; //遍历Set NSArray *setArray = [mutableSet1 allObjects]; array_display(setArray);