iOS开发入门 2 -基础篇:iOS 当中的集合类型

今天继续昨天的内容,上一篇讲述了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

喜欢的三联一下再走哈~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想你知道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值