黑马程序员 --- NSArray和NSMutableArray的用法

时间:2021-03-05 23:17:49
NSArray和NSMutableArray的用法

NSArrayoc中的数组类,开发中建议使用NSArray替代C语言中的数组。

C语言中数组和OC下的NSArray的不同之处有如下:

1.c数组只能存放一种类型的数据(类型必须一致),OC数组可以添加任意类型的OC类型;

2.c数组不能方便的动态添加、删除数组元素,长度固定,OC动态数组可以;


NSArray的使用注意:

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

2.NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式;NSArray中不能存储nil,因为NSArray认为nil是数组的结束标记,nil也是基本数据类型,不能存放到NSArray中。


NSArray的创建方式:

快速创建方式:NSArray *a = @[@”12”,@”23”,@”33”@”44”,nil]

快捷方式访问:a[1];

NSArray *arr1 = [NSArray array]; //空数组
NSArray *arr2 = [NSArray arrayWithObject:@"1"];
NSArray *arr3 = [NSArray arrayWithObjects:@"1",@"2",nil];
NSArray *arr4 = [[NSArray alloc] initWithObects:@"1",@"2",nil;
NSArray *arr5 = [NSArray arrayWithArray:arr4];


获取元素的个数:

<span style="font-size:14px;">NSUInteger count = [arr2 count];</span>


获取索引下的元素:

id object = [arr2 objectAtIndex:1];


判断数组中是否还有某个元素:

BOOL flag = [arr2 containsObject:@"1"];


获取数组的最后一个元素:

id objcet = [arr3 lastObject];


查找object元素在数组的位置(如果找不到就返回-1NSNotFound)

NSUInteger index = [arr3 indexOfObject:@"2"];
if(index != NSNotFound)
{
NSLog(@"index = %d",index);
}

读文件:

NSString *path = @"路径/文件";
NSArray *arr = [NSArray arrayWithContentsOfFile:path];

写文件:
NSArray *arr = [NSArray initWithObjects:@"1",@"2",nil];
BOOL flag = [arr writeToFile:path atomically:YES];
if(flag)
{
NSLog(@"写入成功");
}
else
{
NSLog(@"写入失败");
}

NSString和NSArray关联:
NSArray *arr = [NSArray initWithObjects:@"400",@"1234",@"5678",nil];
NSString *str = [arr componentsJoinedByString:@”-”]; //400-1234-5678
//给一个字符串通过一个字符分解成一个数组保存
NSArray *arr2 = [str componentsSeparatedByString:@”-”];


NSMutableArray:它是NSArray的子类,NSArray一旦初始完毕后,它里面的元素永远是固定的,不能删除和添加元素,它是可变的,随时可以往里面添加更改删除元素


NSMutableArray注意事项:

快速创建方式下的NSMutableArray也是不可变的,不能添加元素

NSMutableArray *arr = @[@"1",@"2"];
[arr addObject:@"3"]; //这是错的

创建方式:

NSMutableArray *marr = [NSMutableArray  array];

添加元素:
[marr addObject:@"1"]; //添加元素在最后位置
[marr insertObject: @"2" atIndex:0];</span><span style="font-size:18px;"> //插入元素在指定位置,后面的元素往后面移动一位


删除元素:
[marr removeLatObject];      //删除最后一个元素
[marr removeObject:@"2"]; //删除一个元素

[marr removeObjectAtIndex:0; // 删除某个索引的元素
[marr removeAllObject]; //删除所有的元素;

查找元素:

OOL flag = [marr containsObject:@"2"];
if(flag)
{
NSLog(@"数组中还有这个元素");
}


交换元素:

[marr exchangeObjectAtIndex:0  withObjectAtIndex:1];

替换元素:
[marr replaceObjectAtIndex:0  withObject: @"4"];// 替换某个索引下的元素
arr[1] = @”five”; //快速方式


NSArray和NSMutableArray的一些常用方法:

1.NSArray的类方法创建

+(instancetype)array;

+(instancetype)arrayWithObject:(id)anObject;

+(instancetype)arrayWithObjects:(id)anObject,,,....;   //创建多个参数的数组

+(instancetype)arrayWithArray:(NSArray *)array;

+(id)arrayWithContentsOfFile:(NSString *)path; //读取一个xml文件

+(id)arrayWithContentsOfURL:(NSURL *) url;  //读取一个url 协议file

 

2.对象方法创建:

-(NSArray *)init;

-(NSArray *)initWithObjects(id)anObject,,,....:

-(NSArray *)initWithArray;

-(NSArray *)initWihtContentsOfFile;

-(NSArray *)arrayWithContentsOfURL:(NSURL *) url;

 

NSArray的常见用法

-(NSUInteger)count;  //获取集合元素的个数

-(id)objectAtIndex:(NSUInteger)index; //获取index位置的元素

-(BOOL)containsObject:(id)anObject;  //判断数组中是否含有某个元素

-(id)lastObject;

-(id)firstObject;

-(NSUInteger)indexOfObject;(id)object; //查找object元素在数组的位置(如果找不到就返回-1NSNotFound

-(NSUInteger)indexOfObject;(id)object inRange:(NSRange)range;//range的范围查找object在数组中的位置


NSMutableArray的一些常用方法:

-(void)addObject:(id)object; //添加元素在最后位置

-(void)insertObject: (id)object atIndex:(int)index;  //插入元素在指定位置,后面的元素往后面移动一位


-(void)removeLatObject; //删除最后一个元素

-(void)removeObject:(id)object; //删除一个元素

-(void)removeAllObject;    //删除所有的元素;

-(void)removeObjectAtIndex:(int)index; // 删除某个索引的元素


-(void)replaceObjectAtIndex:(int) index  withObject:(id)object;// 替换某个索引下的元素

-(BOOL)containsObject:(id)object;              //数组中是否含有某个元素

-(void)exchangeObjectAtIndex:(int)index  withObjectAtIndex:(int)aIndex;  两个下表元素进行交换