数组是一个有序的集合类,可以根据编制的索引找到想要的结果。OC数组只能存储对象(如字符串、数组、字典等),不能存储基本数据类型(如int,float,char),也不能存储nil。分为不可变数组(NSArray)和不可变数组(NSMutableArray)。可变数组在初始化创建以后还可以对其内容进行操作(删除、添加等)。本篇文章只介绍NSMutableArray的一些简单用法。NSMutableArray继承自NSArray。
1、可变数组的创建
1> 初始化创建
//注意nil不能少
NSMutableArray * marr1=[[NSMutableArray alloc]initWithObjects:@"1",@"2" ,nil]; //实例方法
NSMutableArray* marr2=[NSMutableArray arrayWithObjects:@"1",@"2",nil]; //类方法
2>用已有数组创建
NSMutableArray* marr3=[[NSMutableArray alloc]initWithArray:marr1];//实例方法
NSMutableArray* marr4=[NSMutableArray arrayWithArray:marr1];//类方法
注意不能下面的方法创建可变数组
NSMutableArray* marr2=@[@"1", @"2"];
2、向可变数组中添加元素
1> addObject: 向数组中添加一个对象(继承或间接继承自NSObject)
NSMutableArray *marr1=[[NSMutableArray alloc]init]; //初始化创建一个空的可变数组
[marr1 addObject:@"add"]; //添加一个字符串
NSLog(@"可变数组marr1长度:%lu, 内容:%@", [marr1 count], marr1);
2>addObjectsFromArray:将一个数组中的元素全部添加到另一个数组中
NSArray *array=@[@"o1", @"o2"];
[marr1 addObjectsFromArray:array]; //将array中的元素添加到marr1中
NSLog(@"可变数组marr1:长度:%lu, 内容:%@", [marr1 count], marr1);
注意:使用addObject添加一个数组对象 会得到一个二维数组, 而addObjectsFromArray:是将另外一个数组中的元素添加到本数,组所以得到的是一个一维数组。
3>insertObject: atIndex:在指定下标处插入一个对象(会将原来的元素挤到后面)
[marr1 insertObject:@"insert" atIndex:2];
NSLog(@"可变数组marr1:长度:%lu, 内容:%@", [marr1 count], marr1);
4>insertObjects: atIndexes:
NSIndexSet *iset=[[NSIndexSet alloc]initWithIndexesInRange:NSMakeRange(3, 2)];
//将数组元素添加到指定范围
[marr1 insertObjects:@[@"y1",@"y2"] atIndexes:iset];
NSLog(@"可变数组marr1:[长度:%lu], 内容:%@", [marr1 count], marr1);
//创建一个可变的集合
NSMutableIndexSet * iset=[[NSMutableIndexSet alloc]init];
[iset addIndex:1];
[iset addIndex:3];
//从其它数组中顺序取一些元素来出入到本数组的多个不连续的下标位置
[marr1 insertObjects:@[@"x1",@"x2"] atIndexes:iset];
NSLog(@"可变数组marr1:[长度:%lu], 内容:%@", [marr1 count], marr1);
打印结果:
3、删除可变数组中的元素
NSMutableArray *marr1=[[NSMutableArray alloc]initWithObjects:@"abc",@"123",@"def",@"123",@"def",@"abc",@"xy", nil];
//删除最后一个元素
[marr1 removeLastObject];
//删除所有元素
[marr1 removeAllObjects];
//删除指定下标处的元素
[marr1 removeObjectAtIndex:1];
//删除指定范围内所有元素
[marr1 removeObjectsInRange:NSMakeRange(4, 2)];
//删除与其它数组的交集元素
[marr1 removeObjectsInArray:@[@"abc",@"345"]];
//删除所有的指定对象
[marr1 removeObject:@"123"];
[marr1 removeObjectIdenticalTo:@"abc"];
//在指定范围内删除指定的所有出现的元素
[marr1 removeObject:@"def" inRange:NSMakeRange(0, 3)];
这里只是举例,实际操作请注释部分代码。
最后3句代码打印结果:
4、数组元素的替换
1>replaceObjectAtIndex: withObject:将指定下标处的元素替换掉
NSMutableArray *marr1=[[NSMutableArray alloc]initWithObjects:@"o1",@"o2",@"o3",@"o4", nil];
[marr1 replaceObjectAtIndex:1 withObject:@"Replace"];
NSLog(@"可变数组marr1:长度:%lu, 内容:%@", [marr1 count], marr1);
2>replaceObjectsAtIndexes: withObjects:从其它数组中顺序取一些元素来替换本数组的多个不连续的下标位置
NSMutableIndexSet *indexSet=[[NSMutableIndexSet alloc]init];
[indexSet addIndex:1];
[indexSet addIndex:3];
//将数组中的第一个和第三个元素替换掉
[marr1 replaceObjectsAtIndexes:indexSet withObjects:@[@"x1",@"x2"]];
NSLog(@"可变数组marr1:[长度:%lu], 内容:%@", [marr1 count], marr1);
3>replaceObjectsInRange: withObjectsFromArray:用数组将指定范围内的元素替换掉
//被替换和替换的数量不要求匹配
[marr1 replaceObjectsInRange:NSMakeRange(0, 0) withObjectsFromArray:@[@"y1",@"y2",@"y3"]];
NSLog(@"可变数组marr1:[长度:%lu], 内容:%@", [marr1 count], marr1);
打印结果:
5、数组元素的交换
NSMutableArray* marr1=[[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
//将数组中的第一个和第二个元素交换
[marr1 exchangeObjectAtIndex:1 withObjectAtIndex:2];
NSLog(@"交换后可变数组marr1:%@", marr1);
打印结果