iOS学习15之OC集合
1、数组类
1> 回顾C语言数组
数组是一个有序的集合, 来存储相同数据类型的元素。
通过下标访问数组中的元素,下标从 0 开始。
2> 数组
数组是一个有序的集合,OC中的数组只能存储对象类型, 但是对于对象的类型没有限制。
通过下标访问数组元素,下标从 0 开始。
NSArray:不可变数组,即:对象创建好以后,数组中元素个数不能发生变化。
NSMutableArray:可变数组,即对象创建好以后,数组中的元素可以灵活进行增删改操作。
3> NSArray创建
① 初始化方法
NSArray *names = [[NSArray alloc] initWithObjects:@"frank", @"duck", @"monkey", nil];
注: nil 作为数组存放元素的结束标志,多个元素通过逗号间隔。
② 便利构造器
NSArray *names = [NSArray arrayWithObjects:@"frank", @"duck", @"monkey", nil];
③ 字面量
使 " @[] " , " [] "中存入对应的对象,对象之间使 "," 相隔。比如:
NSArray *names = @[@"frank", @"duck", @"monkey", @"cow"];
4> NSArray常用的方法
6 /** 7 * 2.数组查找 8 */ 9 // 通过下标访问对象 10 NSLog(@"%@", a2[1]); 11 12 NSLog(@"%@", [a1 objectAtIndex:2]); 13 14 // 通过对象访问下标 15 NSLog(@"afu在%lu位置", [a1 indexOfObject:@"afu"]); 16 17 /** 18 * 3.判断数组中是否包含某个指定的对象 19 */ 20 BOOL isHave = [a3 containsObject:@"zhatian"]; 21 NSLog(@"isHave = %d", isHave); 22 23 /** 24 * 4.NSString和NSArray之间的转换 25 */ 26 // 将一个字符串按照指定的字符截取,每段内容存放在数组中 27 NSString *string1 = @"孙超&孟玲旭&程涵"; 28 NSArray *strArray = [string1 componentsSeparatedByString:@"&"]; 29 NSLog(@"count = %lu", strArray.count); // a5.count用于得到数组的长度 30 for (int i = 0; i < strArray.count; i++) { 31 NSLog(@"strArray[%d] = %@", i, strArray[i]); 32 } 33 34 // 将数组中的元素按照指定的字符拼接成新的字符串对象 35 NSArray *a5 = @[@"雷坤", @"于艳平", @"尹浩"]; 36 NSString *string2 = [a5 componentsJoinedByString:@"&"]; 37 NSLog(@"string2 = %@", string2);
5> NSMutableArray创建
NSMutableArray 继承于 NSArray,也就是说 NSArray 的所有创建方法 NSMutableArray 都可以使用,NSMutableArray 特有创建的方法如下:
① 初始化方法
NSMutableArray *names = [[NSMutableArray alloc] initWithCapacity:0];
② 便利构造器
NSMutableArray *names = [NSMutableArray arrayWithCapacity:0];
③ 字面量
NSMutableArray *names = [@[@"frank", @"duck", @"monkey", @"cow"] mutableCopy];
6> NSMutableArray常用方法
1 // 1.创建对象 2 NSMutableArray *ma1 = [[NSMutableArray alloc] initWithObjects:@10, @"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", nil]; 3 4 NSMutableArray *ma2 = [NSMutableArray arrayWithObjects:@"quguowei", @"xiaonan", @"zhouyuqi", @"bobo", @"xiaozun", nil]; 5 6 NSMutableArray *ma3 = [@[@"yangyingda", @"yangshukai", @"yida", @"zhatian", @"wumingwei"] mutableCopy]; 7 8 NSMutableArray *ma4 = [[NSMutableArray alloc] initWithCapacity:4]; 9 10 NSMutableArray *ma5 = [NSMutableArray arrayWithCapacity:4]; 11 12 // 2.添加元素 13 [ma1 addObject:@"zf"]; 14 NSLog(@"ma1 = %@", ma1); 15 16 // 插入元素 17 [ma2 insertObject:@"zf" atIndex:0]; 18 NSLog(@"ma2 = %@", ma2); 19 20 // 3.删除元素 21 // 删除指定对象 22 [ma3 removeObject:@"zhatian"]; 23 NSLog(@"ma2 = %@", ma2); 24 25 // 删除最后一个对象 26 [ma3 removeLastObject]; 27 NSLog(@"ma2 = %@", ma2); 28 29 // 删除指定下标的对象 30 [ma2 removeObjectAtIndex:2]; 31 NSLog(@"ma2 = %@", ma2); 32 33 // 删除所有的对象 34 [ma2 removeAllObjects]; 35 NSLog(@"ma2 = %@", ma2); 36 37 // 4.替换指定位置的对象 38 NSMutableArray *ma6 = [[NSMutableArray alloc] initWithObjects:@10, @"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", nil]; 39 40 // 替换指定位置的对象 41 [ma6 replaceObjectAtIndex:0 withObject:@"zf"]; 42 NSLog(@"ma6 = %@", ma6); 43 44 // 5.交换指定位置的对象 45 [ma6 exchangeObjectAtIndex:3 withObjectAtIndex:4]; 46 NSLog(@"ma6 = %@", ma6); 47 48 [ma6 setObject:@"jing" atIndexedSubscript:0]; 49 NSLog(@"ma6 = %@", ma6);
2、字典类
1> 字典的概述
字典是一个无序的集合, 来存储具有一一对应关系的数据。
字典中存储的每一个对象都是一对键值对,键值对包含两个部分key和value,key与value的值都是对象类型。
对于每一对key-value称为一个 条 (Entry)。
字典中的key值是唯一的
2> 字典的特点
与数组不同,字典靠key存取元素。
key与value必须都是对象类型。
字典中键值对的存储是无序的。
字典分为两种类型不可变字典(NSDictionary),可变字典 (NSMutableDictionary)。
3> NSDictionary 创建方法和常用的方法
1 /** 2 * 1.创建对象 3 */ 4 // 初始化方法 5 NSDictionary *dict1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan", @"name", @"boy", @"sex", @18, @"age", nil]; 6 NSLog(@"dict1 = %@", dict1); 7 8 NSDictionary *dict2 = [[NSDictionary alloc] initWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]]; 9 NSLog(@"dict2 = %@", dict2); 10 11 // 类方法 12 NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"liuaoran", @"name", @88, @"age", @"nan", @"sex", nil]; 13 NSLog(@"dict3 = %@", dict3); 14 15 NSDictionary *dict4 = [NSDictionary dictionaryWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]]; 16 NSLog(@"dict4 = %@", dict4); 17 18 // 字面量 19 NSDictionary *dict5 = @{ 20 @"name" : @"gaojie", 21 @"sex" : @"boy", 22 @"age" : @28, 23 @"hobby": @"nana" 24 }; 25 NSLog(@"dict5 = %@", dict5); 26 27 /** 28 * 2.查找 29 */ 30 31 // 根据key查找object 32 NSString *string1 = [dict5 objectForKey:@"name"]; 33 NSLog(@"string1 = %@", string1); 34 35 // 下标法 下标为key值 36 NSLog(@"%@", dict5[@"name"]); 37 38 /** 39 * 3.获取字典的长度 40 */ 41 NSLog(@"count = %lu", dict5.count);
3> NSMutableDictionary 创建方法和常用的方法
1 // 1.创建对象 2 // 初始化方法 3 NSMutableDictionary *mdict1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"liuaoran", @"name", @88, @"age", @"nan", @"sex", nil]; 4 NSLog(@"mdict1 = %@", mdict1); 5 6 NSMutableDictionary *mdict2 = [[NSMutableDictionary alloc] initWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]]; 7 NSLog(@"mdict2 = %@", mdict2); 8 9 // 类方法 10 NSMutableDictionary *mdict3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"liuaoran", @"name", @88, @"age", @"nan", @"sex", nil]; 11 NSLog(@"mdict3 = %@", mdict3); 12 13 NSMutableDictionary * mdict4 = [NSMutableDictionary dictionaryWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]]; 14 NSLog(@"mdict4 = %@", mdict4); 15 16 // 2.添加、修改键值对 17 18 // 方法位于NSMutableDictionary类中 19 [mdict1 setObject:@"lisi" forKey:@"name1"]; // 当key存在时,只会讲value修改,若不存在,则会增加一个新的键值对 20 NSLog(@"mdict1 = %@", mdict1); 21 22 // 方法位于NSObject类中 23 [mdict2 setValue:@"qinghedasha" forKey:@"address"]; 24 NSLog(@"mdict2 = %@", mdict2); 25 26 /* 27 setVlaue: forKey: 的key参数类型必须是NSString * ,是OBject对象的方法,也就是说所有的OC对象都有这个方法。 28 setObject: forKey: 的key参数类型可以使任意类型的对象,是NSMutableDictionary类中特有的方法。 29 */ 30 31 [mdict2 addEntriesFromDictionary:@{@"name1" : @"lishi"}]; 32 NSLog(@"mdict2 = %@", mdict2); 33 34 // 3.删除 35 // 通过key进行删除 36 [mdict1 removeObjectForKey:@"name1"]; 37 NSLog(@"mdict1 = %@", mdict1); 38 39 // 删除所有内容 40 [mdict1 removeAllObjects]; 41 NSLog(@"mdict1 = %@", mdict1);
3、集合类
1> 集合的描述
集合是 OC 中另一个容器,开发过程中使用的范围并没有数组和字典频繁。OC中的集合分为不可变集合(NSSet)和可变集合(NSMutableSet)两种。
2> 集合的特点
① 互异性 集合中不能够存在两个相同的对象。
② 无序性 集合中的对象没有顺序,先添加的对象不一定在第一个位置,后添加的也不一定在最后的位置。
集合经常用来处理重用问题
3> NSSet的创建
1 // 初始化方法 2 NSSet *set1 = [[NSSet alloc] initWithObjects:@"frank", @"duck", @"monkey", nil]; 3 4 // 类方法 5 NSSet *set2 = [NSSet setWithObjects:@"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", @"afu", nil];
注意:不可变集合一旦创建,集合中的对象无法修改,只能从集合中读取对象,并且没有快速创建集合对象的字面量。
4> NSSet的常用操作
1 // 任意取一个元素 2 NSString *str = [set anyObject]; 3 // 取出所有元素 4 NSArray *array = [set allObjects]; 5 NSLog(@"%@", array); 6 // 获取集合中元素个数 7 NSLog(@"%lu", set.count); 8 // 判断对象是否在集合中 9 NSLog(@"%d", [set containsObject:@"nana"]);
5> NSMutableSet概述
NSMutableSet(可变集合)的父类是NSSet,具有NSSet所有的方法,同时在其基础上又添加了"添加"和"删除"对象的操作。
6> NSMutableSet常用操作
1 // 添加对象 2 [mset addObject:@"-1"]; 3 // 删除一个对象 4 [mset removeObject:@"-1"]; 5 // 删除所有对象 6 [mset removeAllObjects];