今天继续昨天的内容,上一篇讲述了OC当中的基本数据类型,这次要讲的是OC当中的集合数据类型,NSArray(数组) NSDictionary(字典) NSSet(集合)这三种集合数据类型。
一、NSArray 和 NSMutableArray
1、NSArray
NSArray
是一个集合数据类型,存储的对象必须为 OC 当中的对象类型(单数组中的数据类型不不一定要是单一对象类型,可以为多种类型并存),保存的对象类型为有序数据,可以按照数组当中的下标来对应取出数据。
(1)初始化方法(五种最常用的初始化方法)
1 NSArray *array0 = [[NSArray alloc] initWithObjects:@"11",@"dd",@(22), nil];
2
3 NSArray *array1 = [[NSArray alloc] initWithArray:array0];
4
5 NSArray *array2 = [NSArray arrayWithObjects:@"11",@"dd",@(22), nil];
6
7 NSArray *array3 = [NSArray arrayWithArray:array2];
8
9 NSArray *array4 = @[@"11",@"dd",@(22)]; //此种写法为语法糖的写法,其概念完全等价于上面的几种方法,只是写法简洁了一点,新手不推荐使用.还需要记住一点的是@[]这种写法创建的数组只可以是不可变数组(NSArray)
(2)常用操作
1 NSArray *array = [[NSArray alloc] initWithObjects:@"11",@"dd",@22, nil];
2
3 //获取指定下标下的数组元素
4
5 NSLog(@"%@",array[0]);
6
7 NSLog(@"%@",[array objectAtIndex:0]);
8
9 //获取数组中包含多少元素
10
11 [array count];
12
13 //获取数组中的所有元素
14
15 for(NSInteger i =0; i < array.count; i ++) {
16
17 NSLog(@"%@",array[i]);
18
19 }
20
21 //判断当前数组是否包含某元素
22
23 [array containsObject:@"11"];
24
25 //获取元素在当前数组中的下标
26
27 NSUInteger index = [array indexOfObject:@"11"];
28
29 //快速遍历数组(需要注意的是快速遍历并不是按照一定顺序来进行的,而是快速的取出当前数组中所有的元素并展示的.)
30
31 for(id object in array) {
32
33 NSLog(@"%@",object);
34
35 }
36
37 [array firstObject];//获取第一个元素
38
39 [array lastObject];//获取最后一个元素
2、NSMutableArray
(1)初始化方法(六种最常用的方法)
1 //以下四种方式对照NSArray去理解
2
3 NSMutableArray *mArray0 = [[NSMutableArray alloc] initWithObjects:@"11",@"dd",@(22), nil];
4
5 NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithArray:(NSArray *)mArray0]; //(NSArray *)mArray0这里是由于类型不匹配,要求的参数是不可变数组 这里强转了一下(class *)意思是强转为指定(class *)类型的对象.强转的使用在以后会单独讲解,现在只做了解.
6
7 NSMutableArray *mArray2 = [NSMutableArray arrayWithObjects:@"11",@"dd",@(22), nil];
8
9 NSMutableArray *mArray3 = [NSMutableArray arrayWithArray:(NSArray *)mArray2];
10
11 //初始化可变数组并申请10个内存地址大小的内存空间(注意这里的10个内存大小并不是一成不变的,当你没用完时此对象指向的内存地址空间大小为10 当储存内容超过10以后系统会自动分配新的内存空间以供使用)
12
13 NSMutableArray *mArray4 = [NSMutableArray arrayWithCapacity:10];
14
15 //同样为初始化可变数组但是不指定初始内存空间大小
16
17 NSMutableArray *mArray5 = [NSMutableArray array];
(2)常用操作
1 NSMutableArray *mArray = [[NSMutableArray alloc] initWithObjects:@"11",@"dd",@(22), nil];
2
3 //添加元素
4
5 [mArray addObject:@"cc"];
6
7 //在指定位置添加元素
8
9 [mArray insertObject:@"ss" atIndex:0];
10
11 //删除元素
12
13 [mArray removeObject:@"cc"];
14
15 //删除指定位置的元素
16
17 [mArray removeObjectAtIndex:0];
18
19 //删除所有元素
20
21 [mArray removeAllObjects];
22
23 //删除最后一个元素
24
25 [mArray removeLastObject];
26
27 //修改数组某一元素的内容(两种方式一种是根据下标直接替换当前数组中的元素,另一种是直接按照下标取出元素并修改)
28
29 [mArray replaceObjectAtIndex:0 withObject:@"yy"];//f根据下标直接替换元素
30
31 mArray[0] =@"tt";//按照下标取出元素并修改
PS.可变数组和不可变数组的遍历方式都是相同的,所以不过的介绍了。
二、NSDictionary 和 NSMutableDictionary
字典
是 OC 当中最常用的集合对象类型,字典顾名思义的意思就是和日常中使用的字典是一个意思,字典集合当中存储的对象都是以键值对的形式存在的,所谓的键值对当中的键值得就是索引,值就是键对应的储存的数据。字典在正常的使用中就是以键来获取对应的值,要注意的是字典中的键是唯一的。不可能出现同样的两个键。
值得注意的地方是,字典中的储存的数据对象都是无序的,所以无法通过下标来取值,字典取值是通过键也就是索引来获取对应的数据。
1、NSDictionary
(1)初始化方法
1 NSDictionary *dic0 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];
2
3 NSDictionary *dic1 = [[NSDictionary alloc] initWithDictionary:dic0];
4
5 NSArray*keyArray =@[@"key0",@"key1"];
6
7 NSArray*valueArray =@[@"value0",@"value1"];
8
9 NSDictionary *dic2 = [[NSDictionary alloc] initWithObjects:valueArray forKeys:keyArray];
10
11 NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];
12
13 NSDictionary *dic4 = [NSDictionary dictionaryWithDictionary:dic3];
14
15 NSDictionary *dic5 = [NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray];
16
17 //字典的语法糖写法 需要注意的是字典的语法糖写法是@{}这里是大括号 大括号中是以@"":@""为一个对象元素 对象之间是使用逗号分隔.语法糖初始化字典时一定要记住@"键":@"值",和上方的初始化是相反的.
18
19 NSDictionary *dic6 = @{@"key0":@"value0",@"key1":@"value1"};
(2)常用操作
1 NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"vallue1",@"key1", nil];
2
3 //获取字典元素个数
4
5 [diccount];
6
7 //获取字典中的元素
8
9 [dicobjectForKey:@"key0"];
10
11 //遍历字典
12
13 for(NSString*keyindic) {
14
15 NSLog(@"%@",[dicobjectForKey:key]);
16
17 }
18
19 //获取字典的所有键
20
21 [dicallKeys];
22
23 //获取字典的所有值
24
25 [dicallValues];
2、NSMutableDictionary
(1)初始化方法
1 NSMutableDictionary *mDic0 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];
2
3 NSMutableDictionary *mDic1 = [[NSMutableDictionary alloc] initWithDictionary:(NSDictionary *)mDic0]; //(NSDictionary *)mDic0这里是由于类型不匹配,要求的参数是不可变数组 这里强转了一下(class *)意思是强转为指定(class *)类型的对象.强转的使用在以后会单独讲解,现在只做了解.
4
5 NSMutableDictionary *mDic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];
6
7 NSMutableDictionary *mDic3 = [NSMutableDictionary dictionaryWithDictionary:(NSDictionary *)mDic2];
8
9 //初始化可变字典并申请10个内存地址大小的内存空间(注意这里的10个内存大小并不是一成不变的,当你没用完时此对象指向的内存地址空间大小为10 当储存内容超过10以后系统会自动分配新的内存空间以供使用)
10
11 NSMutableDictionary *mDic4 = [NSMutableDictionary dictionaryWithCapacity:10];
12
13 //同样为初始化可变字典但是不指定初始内存空间大小
14
15 NSMutableDictionary *mDic5 = [NSMutableDictionary dictionary];
(2)常用操作
1 NSMutableDictionary *mDic0 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];
2
3 //添加元素
4
5 /*
6
7 需要注意的是这两种方法都是为字典中添加键值对的方法
8
9 setObject 中value的对象不能为空否则会报错,但是setValue中 value是可以为空的
10
11 还有需要注意的一点是[NSNull null]这个代表的是创建了一个空的对象并不等价于nil
12
13 当使用setValue时如果value为nil时会默认调用removeObjectForKey这个方法,所以当setValue的值为nil时并不会添加对象到字典中.
14
15 setValue中值应该为字符串类型
16
17 setObject中添加的值为任意对象类型.
18
19 forkKey中值必须为字符串类型.
20
21 */
22
23 [mDic0setObject:@"value2" forKey:@"key2"];
24
25 [mDic0setValue:@"value3" forKey:@"key3"];
26
27 //删除元素
28
29 [mDic0removeObjectForKey:@"key1"];
30
31 //修改字典中的元素
32
33 [mDic0setValue:@"value4" forKey:@"key0"]; //其实修改和添加调用的方法是一致的,不同点在于key如果key是字典中已经包含的元素就是修改,入不包含则为添加元素
34
35 //获取字典中的元素
36
37 [mDic0objectForKey:@"key0"];
38
39 //删除所有元素
40
41 [mDic0removeAllObjects];
三、NSSet和NSMutableSet
集合
是 OC 当中的一个集合数据类型,其区别于Array
不同点在于Array
是有序存储的,而NSSet
是无序的(所以NSSet是无法通过下标取值的),而且Array
是不排重复元素的,而NSSet
是排重存储的。
1、NSSet
(1)初始化方法
1 NSSet *set0 = [[NSSet alloc] initWithObjects:@"111",@"111",@"222",@"222", nil];
2
3 NSSet *set1 = [[NSSet alloc] initWithSet:set0];
4
5 NSSet *set2 = [NSSet setWithObjects:@"111",@"111",@"222",@"222", nil];
6
7 NSSet*set3 = [NSSetsetWithSet:set2];
8
9 NSArray *array = @[@"111",@"111",@"222",@"222"];
10
11 NSSet *set4 = [[NSSet alloc] initWithArray:array];
12
13 NSSet*set5 = [NSSetsetWithArray:array];
14
15 //需要注意的是初始化时为set赋的值为@"111",@"111",@"222",@"222",由于set是排重存储的所以set的最终储存结果为@"111",@"222",
(2)常用操作
1 NSSet *set0 = [[NSSet alloc] initWithObjects:@"111",@"222", nil];
2
3 //取出set中的元素(由于set是无序存储所以无法指定某一元素进行提取)
4
5 [set0anyObject];//随机打印set中的元素
6
7 //遍历set
8
9 for(idobjectinset0) {
10
11 NSLog(@"%@",object);
12 }
2、NSMutableSet
(1)初始化方法
1 NSMutableSet *set0 = [[NSMutableSet alloc] initWithObjects:@"111",@"222", nil];
2
3 NSMutableSet *set1 = [[NSMutableSet alloc] initWithSet:set0];
4
5 NSMutableSet *set2 = [NSMutableSet setWithObjects:@"111",@"222", nil];
6
7 NSMutableSet *set3 = [NSMutableSet setWithSet:set2];
8
9 NSArray*array =@[@"111",@"222"];
10
11 NSMutableSet *set4 = [[NSMutableSet alloc] initWithArray:array];
12
13 NSMutableSet *set5 = [NSMutableSet setWithArray:array];
14
15 //初始化可变集合并申请10个内存地址大小的内存空间(注意这里的10个内存大小并不是一成不变的,当你没用完时此对象指向的内存地址空间大小为10 当储存内容超过10以后系统会自动分配新的内存空间以供使用)
16
17 NSMutableSet *set6 = [NSMutableSet setWithCapacity:10];
18
19 //同样为初始化可变集合但是不指定初始内存空间大小
20
21 NSMutableSet *set7 = [NSMutableSet set];
(2)常用操作
1 NSMutableSet *set0 = [[NSMutableSet alloc] initWithObjects:@"111",@"222", nil];
2
3 //添加元素
4
5 [set0addObject:@"333"];
6
7 NSArray*array =@[@"444",@"555"];
8
9 [set0addObjectsFromArray:array];
10
11 //删除元素
12
13 [set0removeObject:@"222"];
14
15 //删除所有元素
16
17 [set0removeAllObjects];
本次 OC 当中的集合类型就算介绍完了,这里列出的是最为常用的一些初始化方法和使用方法,其内部还有很多的方法可以使用,具体的等有需求的时候再单独介绍。下一篇文章要介绍的是《iOS 开发的基础视图控件UIView
》
喜欢的三联一下再走哈~
标签:10,NSMutableSet,入门,nil,元素,iOS,NSDictionary,NSArray,集合 From: https://blog.51cto.com/u_11806040/6662366