首页 > 其他分享 >iOS开发入门 2 -基础篇:iOS 当中的集合类型

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

时间:2023-07-08 16:32:37浏览次数:36  
标签:10 NSMutableSet 入门 nil 元素 iOS NSDictionary NSArray 集合

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

相关文章

  • iOS 开发入门 3-基础: iOS 视图控件 UIView
    相信大家通过前两篇文章已经大致了解了OC当中的数据组成部分,今天正式开始咱们iOS开发最主要的一个环节视图控件的使用.在正式开始讲解UIView之前我们需要先了解下什么是视图控件.其实视图控件的概念很好理解,比如说我们在打开某一应用的时候在手机上所看到的所有界面组成元素都是......
  • 公共操作-推导式(集合、列表、字典)
    1'''2Python推导式(Comprehensions)是一种简洁而强大的语法,用于创建新的数据结构(如列表、集合和字典)或对现有数据结构进行转换。3它可以使用更简单的方式完成迭代、筛选、映射等操作。45'''6#1.循环生成列表7#1.1准备⼀个空列表8list1=[]9#1.2书......
  • Go语言基础-Go语言基础语法入门
    第01天上午01课程内容1初识GO语言2开发环境搭建3第一个程序(程序结构)4基本组成元素:标识符、运算符、分隔符5变量、作用域6常量、7数据类型:布尔型整数浮点数字符串指针8流程控制:ifswitchforbreakcontinue9作业:①打印乘法口诀②猜数字 001初识......
  • iOS UITableViewCell侧滑抖动
    问题工程代码中cell在侧滑删除时,cell会抖动。在只用masonry代码中,cell会偏移。加上以下代码,cell会消失。letlabel=UILabel()label.isHidden=truelabel.sizeToFit()label.frame=CGRectMake(15,17,label.frame.width,label.frame.height)原因暂未知,先做记录......
  • Go语言基础-Go语言基础语法入门
    第01天Go语言基础语法入门1初识GO语言简介Go是一门开放源码的编程语言,可容易构建,简单、可靠和高效的软件历史Go语言是由谷歌的开发工程师(罗伯特·格瑞史莫、罗勃·派克、肯·汤普逊等)于2007年开始设计,利用20%的自由时间开发的实验项目,并于2009年以BSD-style授......
  • 开源许可证保姆级入门手册
    开源许可证是个相当庞杂的范畴,仅OSI(OpenSourceInitiative,开放源代码促进会)批准的许可证就有80多种;此外,还有数百种在开源生态中流传的其他许可证。虽然有些开源许可证相对简洁明了,适合只想简单发布开源项目的人使用;但还有一些许可证非常冗长复杂,甚至需要专业的法务团队介入......
  • SignalR 入门
    SignalR介绍SignalR是一个开源的实时通信库,用于构建实时、双向的应用程序。它提供了简化实时通信的功能,允许服务器主动向客户端推送数据,实现实时更新和即时通知的功能。SignalR具有高度集成性、跨平台支持和可扩展性,适用于实时聊天、在线游戏、监控系统等各种应用场景。Signa......
  • python爬虫scrapy入门教程
    背景:python实现网页爬虫,可以使用scrapy,首先,需要安装python的运行环境,我们这里使用anaconda集成环境。安装好以后,打开AnacondaNavigator,打开CMD.exePrompt,在命令行窗口运行:pipinstallscrapy,运行完,没有报错,意味着scrapy就安装好了,然后,在当前文件夹下新建一个文件,名为:myspider.p......
  • 用hexo搭配gittee搭建个人博客:从入门到放弃
    本地环境是WSL(Debian)+vscode,仓库在gittee上hexo个人页面搭建参考:Linux云服务器下Hexo部署及使用主题地址:Hexo-Theme-freemind.bithackgittee操作参考:在Gitee搭建属于自己的博客过程比较顺利,直到在申请开通gitteepages时需要上传身份证双面照和手持身份证双面照,我放弃了。......
  • clickhouse使用入门
    转载请注明出处(~ ̄▽ ̄)~严禁用于商业目的的转载~  导语:同学,你也不想你根本不懂ClickHouse,却赶鸭子上架使用的事情被其他人知道吧?写在前面:本文旨在让原先有一定SQL基础的人快速简单了解ClickHouse的(关键)概念/特性,侧重于使用方面的介绍比较而非原理/实现挖掘。文章算是个人摘录学......