OC中Foundation框架之NSArray、NSMutableArray

时间:2022-09-25 18:27:10

NSArray概述

 NSArray是OC中的数组类

NSArray特点

 )只能存放任意OC对象,并且是有顺序的
)不能存放非OC对象,比如int/float/double/char/enum/struct等
)它是不可变的,一但初始化完毕后,它里面的内容就永远是固定的,不能删除里面的元素,也不能再玩里面添加元素

NSArray的创建方式

 +(instancetype)array;
+(instancetype)arrayWithObject:(id)anObject;
+(instancetype)arrayWithObjects:(id)firstObj,...;
+(instancetype)arrayWithArray:(NSArray *)array;
+(id)arrayWithContentsOfFile:(NSString *)path;//读取一个xml文件
+(id)arrayWithContentsOfURL:(NSURL*) url;//读取一个xml文件

NSArray使用注意

 )NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式
)NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil时数组元素结束的标记). nil就是 ,0也是基本数据类型,不能存放到NSArray中
)由于NSArray创建以后就是不可变的,所以 NSArray * array =[NSArray array];//这样的数组永远是空的,不可能向其中增加值.(不可变性)

NSArray的常见用法

 获取集合元素个数
-(NSUInteger)count;
获取index位置的元素
-(id) objectAtIndex:(NSUInteger) index;
判断是否包含某个元素
-(BOOL)containsObject:(id)anObject;
返回最后一个元素
-(id)lastObject;
返回第一个元素
-(id)firstObject;
查找anObject元素在数组中的位置(如果找不到,返回-) NSNotFound
-(NSUInteger)indexOfObject:(id)anObject;
在range范围内查找anObject元素在数组中的位置
-(NSUInteger)indexOfObject:(id) anObject inRange:(NSRange) range;

NSArray的简写形式

 数组的创建
[NSArray arrayWithObjects:@"Jack",@"Rose",@"Jim",nil]
简写后:
@[@"Jack",@"Rose",@"Jim"]; 数组元素的访问
[array objectAtIndex:];
现在
array[];

NSArray的遍历

,普通for循环
for(int i=;i<arr.conten;i++){
NSLog(@"%@",arr[i];
}
.增强for循环
for(NSString *str:arr){
NSLog(@"%@",str);
}
.block遍历
id obj 数组的元素的值
NSUInteger idx 索引index,获取数组元素的下标
BOOL *stop YES 表示要停止
[arr enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL *stop){
NSLog(@"索引:%ld---->元素值:%@ ",idx,obj);
}]

NSArray读写文件

 .NSArray数据写入到文件中
//创建一个数组
NSArray *arr =[NSArray arrayWithObjects:@"",@"",@"",@"",@"",nil];
//写入数据到文件中
if([arr writeToFile:@"/Users/liwei/Desktop/arr.plit" atomically:YES]){ NSLog(@"写入成功!"); } .从文件中读取数据,并且放到数组中
NSArray *arr2 =[NSArray arrayWithContentsOfFile:@"/Users/apple/Desktop/arr.plist"];
NSLog(@"arrange=%@",arr2);

NSArray与字符串

 用separator作拼接符将数组元素拼接成一个字符串
-(NSString *)componentsJoinedByString:(NSString *)separator;
字符串分隔
NSString *str=@"400-588-1688";
NSArray *arr =[str componentsSeparatedByString:@"-"];
NSLog(@"%@",arr);

NSMutableArray

 概述:
NSmutableArray是NSArray得子类,
NSArray是不可变的,而NSMutableArray是可变的,随时可以往里面添加、更改、删除元素
//创建一个空的NSMutableArray
NSMutableArray *array = [NSMutableArray array];

NSMutableArray的基本使用

 //创建空数组
NSMutableArray *arr = [NSMutableArray array];
//创建一个指定长度为5的空数组
NSMutableArray *arrange = [[NSMutableArray alloc]initWithCapacity:];
//创建一个数组,包含两个元素
NSMutableArray *arr3 =[NSMutableArray arrayWithObjects:@"",@"",nil];
//调用对象方法创建数组
NSMutableArray *array=[[NSMutableArray alloc] initWithObjects:@"",@"",nil];   

NSMutable的方法

 添加一个元素
-(void) addObject:(id)object;
添加otherArray的全部元素到当前数组
-(void) addjectsFromArdObray:(NSArray *)array;
在index位置插入一个元素
-(void)insertObject:(id) anObject atIndex:(NSUInteger) index;
删除最后一个元素
-(void)removeLastObject;
删除所有的元素
-(void)removeAllObjects;
删除Index位置的元素
-(void)removeObjectAtIndex:(NSUInteger)index;
删除特定的元素
-(void)removeObject:(id)object;
删除range范围内的所有元素
-(void)removeObjectsInRange:(NSRange)range;
用anObject替换index位置对应的元素
-(void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
交换idx1 和 idx2位置的元素
-(void)exchangeObjectAtIndex:(NSUInteger)idxl withObjectAtIndex:(NSUInteger)idxisdx;

NSMutableArray 错误用法

 NSMutableArray *array = @[@"bob",@"steve",@"john"];
[array addObject:@"Peter"];//错误,使用@[@"bob",@"steve",@"john"]这种方式创建的永远是NSArray(不可变数组); 正确的做法
NSMutableArray *array =[NSMutableArray arrayWithArray:@[@"bob",@"steve",@"john"]];
[array addObject:@"Peter"];