Objective - C NSArray不可变数组和NSMutableArray可变数组
OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法。
OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型。
不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素。
创建一个不可变数组对象
//1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号)
NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger",@"honghuang",@"taixu",@"zhili", nil]; //nil不是对象,只是一个标志,告诉编译器数组赋值结束
//2.便利构造器
NSArray *array2 = [NSArray arrayWithObjects:@"zhuba",@"bada",@"zhonger",@"duliu", nil];
打印出的数据以()内容显示,比如:
array1 is (
zhonger,
honghuang,
taixu,
zhili
)
//3.笑笑语法 语法糖,字面量 这是不可变数组的写法。。。
//OC中的数组可以存放不同类型的对象
NSArray *array3 = @[@"yousiyi", @"huangshenme", @"shuishen", @"qiuxiang", @12];
//数组的两个核心方法 count objectAtIndex:
//count 求数组元素个数
unsigned long count = [array1 count];
NSLog(@"array1count is %lu",count); //可以打印出元素的个数
//objectAtIndex:通过给定的下标,找到相应的元素
NSString *bada = [array2 objectAtIndex:1];
NSLog(@"bada is %@",bada);
NSString *zhonger = array2[2]; //语法糖表达方式
NSLog(@"zhonger is %@",zhonger);
//遍历array3里面的每一个元素
unsigned long count1 = [array3 count];
for (int i = 0; i < count1; i ++) {
NSLog(@"%@",array3[i]);//语法糖
}
//判断数组中是否包含某个元素
BOOL isTrue = [array2 containsObject:@"zhuba"];
NSLog(@"isTrue is %d",isTrue);
//获取某个元素所在的数组下标
NSUInteger index = [array2 indexOfObjectIdenticalTo:@"bada"];
NSLog(@"index is %lu",index);
//通过数组来实现分割字符串,拼接字符串、
//以空格分隔字符串
NSString *str = @"zhonger m 19 m";
NSArray *resultArray = [str componentsSeparatedByString:@" "];
//以66666拼接字符串
NSArray *rArray = @[@"bada", @"qiuxiang",@"zaiyiqi"];
NSString *str1 = [rArray componentsJoinedByString:@"66666"];
//至于可变数组,在不可变数组的情况下,提供了增删改的操作,让数组功能变得更加多样化
//1.创建一个可变数组
NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:0];
//2.便利构造器
NSMutableArray *mArr1 = [NSMutableArray arrayWithCapacity:0];
//3.可变数组的字面量创建方式
NSMutableArray *mArr2 = [@[@"zhonger", @"dada", @"zhuzhu", @"linlin"]mutableCopy];
//往可变数组里添加元素,addobject
[mArr2 addObject:@"addobject"];
//往可变数组的指定位置插入一个新的元素 insertObject
[mArr2 insertObject:@"charu" atIndex:1];
//移除可变数组中的某一元素
//通过下标
[mArr2 removeObjectAtIndex:4];
NSLog(@"mArr2 is %@",mArr2);
//通过指定内容
[mArr2 removeObject:@"zhuzhu"];
NSLog(@"mArr2 is %@",mArr2);
//删除数组中最后一个元素
[mArr2 removeLastObject];
NSLog(@"mArr2 is %@",mArr2);
//删除数组中所有的元素
//[mArr2 removeAllObjects];
//NSLog(@"mArr2 is %@",mArr2);
//替换可变数组中的元素
[mArr2 replaceObjectAtIndex:0 withObject:@"gou"];
[mArr2 replaceObjectAtIndex:1 withObject:@"taixu"];
NSLog(@"mArr2 is %@", mArr2);
//交换可变数组中两个元素的位置
[mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:1];
NSLog(@"mArr2 is %@", mArr2);
注意:无论是不可变还是可变数组,如果是在MRC环境下,只要加入这个数组中,都是导致引用计数加1,作为三大容量之一,数组存放的是有序的对象,不同于字典的有序,数组可以实现排序。
Objective - C NSArray不可变数组和NSMutableArray可变数组的更多相关文章
- Objective-C( Foundation框架 一 数组(NSMutableArray))
NSMutableArray:可变数组 NSMutableArray是NSArray的子类 创建NSMutableArray数组对象 添加数组元素: // 创建数组 NSMutableArray *a ...
- OC基础 可变数组与不可变数组的使用
OC基础 可变数组与不可变数组的使用 1.不可变数组 1.1不可变数组的创建 //实例方法 NSArray *array = [[NSArray alloc] initWithObjects:&quo ...
- Chapter5_初始化与清理_数组初始化与可变参数列表
一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...
- scala (4) 可变数组和不可变数组
在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下) 不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的 可变数组指的是长度和数组中角标对 ...
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- 窥探Swift之数组安全索引与数组切片
今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在 ...
- OC基础 可变字典与不可变字典的使用
OC基础 可变字典与不可变字典的使用 1.不可变字典 1.1创建不可变字典 //创建字典 //注意: //1,元素个数是偶数 //2,每两个元素是一个键值对 //3,值在前,键在后 NSDiction ...
- [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...
- JAVA的可变类与不可变类
转自: http://www.blogjava.net/hilor/articles/150610.html 可变类和不可变类(Mutable and Immutable Objects)的初步定义: ...
随机推荐
- formData上传图片
---------------------formData上传图片--------------------- <form id="imageform"> <img ...
- Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)
摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...
- windows下IIS+PHP解决大文件上传500错问题
linux下改到iis+php后,上传大于2M就出500错,改了php.ini中的upload_max_filesize也不行,最后解决如下: 第一步:修改php.ini 上传大小限制 (以上传500 ...
- html5之history对象 控制浏览器前进或后退事件
一.摘要: 总结用history对象操作浏览器的历史记录的方法,在项目中使用的是mui框架,总结中包括我在实际项目中遇到的问题. 二.总结: 实现效果: 实现代码: 上面的编辑页面加载的时候就要先调用 ...
- 实践最简单的项目:WC
wc.exe是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有的wc.exe的功能,并加以扩充,给出某程序设计源语言文件的字符数.单词数和行数. 给实现一 ...
- java异常笔记
1:<java核心技术卷一>473页提到:如果在子类中覆盖了超类的一个方法,子类方法中声明的已检查异常不能超过超类方法中声明的异常范围. 显然,如果子类中抛出的异常范围比超类还大.多态将无 ...
- CentOS 下 sftp 有人能连有人不能连 程序设定了禁用IP
问题现象: 局域网的一台Linux上运行有sftp Server. 大家用FileZilia 连接,有两个人能够连接,有两个人不能连接. 解决问题: 1.先查看服务器上的sftp server是哪一个 ...
- 常用SQL Server日期格式化
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46 Select CONVERT(varchar(100), GETDATE(), 24): 10 ...
- ios项目上传svn丢失*.a文件
Win TortoiseSVN:鼠标右键-TortoiseSVN-Settings-General-Subversion-Golobal ignore pattern Win Subversion:编 ...
- LeetCode 350. Intersection of Two Arrays II
Given two arrays, write a function to compute their intersection. Example:Given nums1 = [1, 2, 2, 1] ...