------------NSArray的创建方式
1),类方法创建
+ (instancetype)array;
+ (instancetype)arrayWithObject:(id)anObject;
+ (instancetype)arrayWithObjects:(id)firstObj, ...;
+ (instancetype)arrayWithArray:(NSArray *)array;
+ (id)arrayWithContentsOfFile:(NSString *)path;
+ (id)arrayWithContentsOfURL:(NSURL *)url;
2),对象方法创建
- (instancetype)initWithObjects:(id)firstObj, ;
- (instancetype)initWithArray:(NSArray *)array;
- (NSArray *)initWithContentsOfFile:(NSString *)path;
- (NSArray *)initWithContentsOfURL:(NSURL *)url;
//NSArray特点: // 一旦创建成功,内容不可改变 // 只能存放OC对象 //1)创建一个空数组 NSArray *arr1 = [NSArray array]; //2)创建数组,只有一个元素 NSArray *arr2 = [NSArray arrayWithObject:@"1"]; //3)创建数组,有多个元素 // nil 表示数组赋值结束 // 常见写法 NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1, nil]; NSLog(@"arr3 = %@",arr3); //4)调用对象方法,创建数组 //nil Nil NULL NSNULL NSArray *arr4 = [[NSArray alloc] initWithObjects:@"three",[NSNull null],@"four", nil]; NSLog(@"arr4 = %@",arr4); //5)用一个数组可以创建另外一个数组 NSArray *arr5 = [NSArray arrayWithArray:arr3]; NSLog(@"arr5 = %@",arr5);
3),常见用法
- (NSUInteger)count; 获取集合元素个数
- (id)objectAtIndex:(NSUInteger)index; 获得index位置的元素
- (BOOL)containsObject:(id)anObject;是否包含某一个元素
- (id)lastObject; 获取最后一个元素
- (id)firstObject; 获取第一个元素
- (NSUInteger)indexOfObject:(id)anObject; 查找anObject元素在数组中的位置
NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1,@"three", nil]; NSLog(@"arr3 = %@",arr3); //1)获取数组的长度 count获取数组的元素的个数 NSLog(@"%ld",arr3.count); //2)根据下标,获取下标对应的对象 NSLog(@"%@",[arr3 objectAtIndex:3]); //3)返回元素的下标 NSUInteger loc = [arr3 indexOfObject:@"three"]; NSLog(@"%ld",loc); //4)数组中是否包含了某个元素 if([arr3 containsObject:@"four"]){ NSLog(@"包含此元素"); }else{ NSLog(@"不包含"); } }
-------------NSArray的简写形式
NSArray *arr = @[@"Jack", @"Rose", @"Jim"];
格式:
NSArray *arr = @[数组元素];
NSArray *arr = @[@"1",@"one",@"3",@4,@"ONE"];
NSLog(@"arr = %@",arr);
获取元素格式:
arr[元素角标index];
NSString *str = arr[0];//获取第零个元素
NSString *str =[arr objectAtIndex:2];
NSLog(@"%@",str);
//2)用简化的方式访问数组元素
str = arr[1]; //C语言形式的数组元素访问
NSLog(@"%@",str);
-------------------NSArray的遍历
NSArray *arr = @[@"one",@"two",@"three",@"four"];
1),普通for循环,通过下标访问
for (int i=0; i<arr.count; i++) { NSLog(@"-> %@",arr[i]); }
2),增强for循环 (for in)
for (NSString * str in arr) { NSLog(@"---> %@",str); }
3),使用block的方式,进行遍历
//block的三个参数含义: 1,数组元素 2,元素下标 3,是否停止 [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { if(idx == 2){ *stop = YES; //停止 // break; }else{ NSLog(@"idx = %ld,obj = %@",idx,obj); } }];
--------------NSArray 读写文件
1),将数组元素写入文件
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
代码:
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil]; //写入数据到plist文件中 if([arr writeToFile:@"/Users/liwei/Desktop/arr.plist" atomically:YES]){ NSLog(@"写入成功!"); }
2),从文件读取数组
+ (NSArray *)arrayWithContentsOfFile:(NSString *)path;
代码:
NSArray *readArr = [NSArray arrayWithContentsOfFile:@"/Users/zhaoxiaohu/Desktop/arr.xml"];
---------------------NSArray 与字符串
1),把数组元素链接成字符串(NSArray的方法)
- (NSString *)componentsJoinedByString:(NSString *)separator;
这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串
//定义一个数组 NSArray *arr = @[@1,@2,@3,@4]; //1)需求: 把数组中的元素用 "-" 连接起来 // [数组 componentsJoinedByString @"分隔符"]; // 1-2-3-4 NSString *str = [arr componentsJoinedByString:@"-"]; NSLog(@"str = %@",str);
2),字符串分割方法(NSString的方法)
//定义一个数组 NSArray *arr = @[@1,@2,@3,@4]; //1)需求: 把数组中的元素用 "-" 连接起来 // [数组 componentsJoinedByString @"分隔符"]; // 1-2-3-4 NSString *str = [arr componentsJoinedByString:@"-"]; NSLog(@"str = %@",str);
//2) 给一个字符串,分割成一个数组
// 400-800-12580 //取得 400 12580 800 NSString *str2 = @"400-800-12580"; NSArray *arr2 = [str2 componentsSeparatedByString:@"-"]; NSLog(@"%@",[arr2 firstObject]); NSLog(@"%@",[arr2 lastObject]); NSLog(@"%@",arr2[1]); str2 = @"400-800-12580#400-888-11200"; NSArray *arr3 = [str2 componentsSeparatedByString:@"#"]; NSLog(@"arr3 = %@",arr3); //第一个电话的每一部分 NSArray *arr4 = [[arr3 firstObject] componentsSeparatedByString:@"-"]; NSLog(@"arr4 = %@",arr4); NSArray *arr5 = [[arr3 lastObject] componentsSeparatedByString:@"-"]; NSLog(@"arr5 = %@",arr5);
-----------------------NSMutableArray--------------------
1,NSMutableArray介绍
1),NSMutableArray是NSArray的子类
2),NSArray是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素 。
3),NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素
2,NSMutableArray基本使用方法
1),创建数组
//创建空数组 NSMutableArray *arr = [NSMutableArray array]; //创建数组,并且指定长度为5,此时也是空数组 NSMutableArray *arr2 = [[NSMutableArray alloc] initWithCapacity:5]; //创建一个数组,包含两个元素 NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"1",@"2", nil]; //调用对象方法创建数组 NSMutableArray *arr4 = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];
2),添加元素
- (void)addObject:(id)object; 添加一个元素
[arr1 addObject:@"fengjie"]; NSLog(@"%p",arr1);
3),插入元素
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
[arr1 insertObject:@"zbz" atIndex:0];
4),删除元素
- (void)removeAllObjects;//删除全部
- (void)removeLastObject;//删除最后一个
- (void)removeObjectAtIndex:(NSUInteger)index;//删除指定位置
- (void)removeObject:(id)anObject;//删除指定元素
//根据对象内容删除 // [arr1 removeObject:@"zbz"]; //根据位置删除 // [arr1 removeObjectAtIndex:1]; //全部删除 [arr1 removeAllObjects];
5),修改元素
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
[arr3 replaceObjectAtIndex:1 withObject:@"four"]; //把下标为一的元素改为four //更加简单地方法 arr3[1] = @"five"; NSLog(@"%@",arr3);
6),查找元素
- (BOOL)containsObject:(id)anObject;
// 查看数组arr3中有没有four这个元素 // BOOL isSearch = [arr3 containsObject:@"four"]; // NSLog(@"%d",isSearch);
7),交换元素
交换idx1和idx2位置的元素
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil]; // 可以交换数组元素 //下标0的元素与下标四的元素交换 [arr5 exchangeObjectAtIndex:0 withObjectAtIndex:4]; NSLog(@"%@",arr5);
-----------------NSMutableArray 错误用法
NSMutableArray *array = @[@"bob", @"steve", @"john"];//这句话报警告
使用@[@"bob", @"steve", @"john"]这种方式创建的永远是NSArray(不可变数组);
正确用法:
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"bob", @"steve", @"john"]];