本文共 3918 字,大约阅读时间需要 13 分钟。
本篇博文分享一个理论知识点,Object-C中可变数组和不可变数组的对比使用,知识比较简单基础,大牛可以忽略。在iOS开发中,一般经常用NSArray类和NSMutableArray类来表示数组,其中NSArray类是NSMutableArray类的父类。在Object-C中,数组是有序的对象的集合,也可以说数组只能存储对象,而且数组中元素类型不能是int,float,CGPoint等类型。
下面就来分析一下不可变数组和可变数组的区别,仅供参考,欢迎指正。
一、NSArray(不可变数组)
NSArray是一个静态数组,不能修改该数组中的元素,也不能往该数组中添加元素。以下是不可变数组常用的一些用法。
1、初始化方法
①//创建一个空不不可变的数组(有三种方式)
NSArray *array1 = [[NSArray alloc] init]; 或
NSArray *array1 = [NSArray new]; 或
NSArray *array1 = [NSArray array];
②//创建一个里面只有一个元素的不可变数组
NSArray *array2 = [NSArray arrayWithObject:@“12345”];
③//创建一个里面有多个元素的不可变数组,便利构造器创建
NSArray *array3 = [NSArray arrayWithObjects:@“123”,@“456”,@“789”,@“abc”,@“def”,nil];
④//方便快捷的写法,字面量方式创建
NSArray *array4 = @[@“12345”];//与②中数组等价
NSArray *array4 = @[@“123”,@“456”,@“789”,@“abc”,@“def”];//与③中数组等价
NSArray *array4 = [NSArray arrayWithArray:array2];
⑤//从本地文件中读取数组
NSArray *array = [NSArray arrayWithContentsOfFile:@""];
⑥//从网上URL文件中读取数组
NSArray *array = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:@""]];
2、数组元素个数(两种方法)
NSUInteger count = array3.count; //③中数组的数组个数
或者:
NSInteger count = [array3 count];
3、访问数组中的元素
//访问③数组中的第一个元素
NSString *string = [array3 objectAtIndex:0];
for (int i = 0; i < array3.count; i++) {
NSLog(@"数组第%d个元素:%@",i,[array3 objectAtIndex:i]);
}
4、通过数组中的元素查找对应下标
NSUInteger index = [array3 indexOfObject:@"abc"];
5、判断数组里面是否存在某一个元素
BOOL flag = [array3 containsObject:@“def”];
6、往不可变数组中添加一个元素,生成一个新的数组
NSArray *newArray1 = [array3 arrayByAddingObject:@“ghi”];
NSArray *newArray2 = [array3 arrayByAddingObjectsFromArray:array3];
NSString *string = [newArray1 componentsJoinedByString:@","];
NSArray *array6 = @[@"123",@"456",@"789",@"000"];
NSString *string = [array6 componentsJoinedByString:@"-"];
NSArray *array7 = [string componentsSeparatedByString:@"-"];
NSString *string2 = [array7 componentsJoinedByString:@""];
7、按照给定的字符串进行截取,将截取的多个部分多段字符串存入数组中
NSString *string3 = @“123+456+789”;
NSArray *array8 = [string3 componentsSeparatedByString:@“+”];
8、按照给定的数组元素进行拼接后放入字符串中:
NSArray *array9 = @[@"1",@"2",@"4",@"3"];
NSString *string4 = [array9 componentsJoinedByString:@"/"]
二、NSMutableArray(可变数组)
NSMutableArray可变数组是一个可修改、可添加的元素。NSMutableArray是NSArray的子类。
1、初始化方法
①//初始化一个可变数组
NSMutableArray *mArray1 = [NSMutableArray new]; 或者
NSMutableArray *mArray1 = [NSMutableArray array];
②//初始化多个元素的可变数组
NSMutableArray *mArray2 = [NSMutableArray arrayWithObject:@"1"];
NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4", @“5”,@“6”,nil];
NSMutableArray *mArray4 = [NSMutableArray arrayWithArray:mArray2];
③//可变数组从不同地方读取数组
NSMutableArray *mArray5 = [NSMutableArray arrayWithCapacity:10];
NSMutableArray *mArray6 = [NSMutableArray arrayWithContentsOfFile:@""];
NSMutableArray *mArray7 = [NSMutableArray arrayWithContentsOfURL:@""];
2、增加数组元素
①//在数组的末尾添加一个元素
[mArray3 addObject:@“7”];
②//在数组的指定位置添加一个元素
[mArray3 insertObject:@“def” atIndex:2]; //添加def到数组下标为2的位置
3、数组元素替换
//将数组指定位置上的元素替换成用户想要的新的元素
[mArray3 replaceObjectAtIndex:3 withObject:@“adc”];
4、数组元素交换位置
[mArray3 exchangeObjectAtIndex:2 withObjectAtIndex:3];
5、删除数组元素
①//删除数组中指定元素
[mArray3 removeObject:@“4”];
②//根据下标删除数组中的元素
[mArray3 removeObjectAtIndex:5];
③//删除数组中最后一个元素
[mArray3 removeLastObject];
④//删除数组中所有的元素
[mArray3 removeAllObjects];
6、快速遍历数组元素
//for循环遍历数组元素
for (NSString *object in mArray3) {
NSLog(@“%@===“, object);
}
7、NSMutableArray常用函数
①创建一个数组,指定容量为size
+(id)arrayWithCapacity:size
②初始化数组,指定容量为size
-(id)initWithCapacity:size
③将对象object添加到数组最后一位
-(void)addObject:object
④将对象object插入到索引为a的位置
-(void)insertObject:object atIndex:a
⑤将数组中下标为a处的元素用object置换
-(void)replaceObject:object atIndex:a
⑥从数组中删除object对象
-(void)removeObject:object
⑦从数组中删除下标为a的对像
-(void)removeObjectAtIndex:a
⑧从数组中删除所有的object
-(void)removeAllObjects
⑨用 selector方法将数组排序
- (void)sortUsingSelector:(SEL)selector
顺便再分享一下上一篇博文发的那个遍历数组的例子,如下图所示:
上面的思路也就是拿到数据源之后,新建一个数组,然后for循环遍历,取出需要的元素,然后存到一个新的可变数组中,然后再把可变数组的值赋值给需要的地方。
以上就是本章全部内容,欢迎关注三掌柜的微信公众号、微博,欢迎关注!
三掌柜的微信公众号:
三掌柜的新浪微博:
转载地址:http://yslf.baihongyu.com/