重修笔记之数组
2018-02-27 本文已影响3人
iOS_July
NSArray :不可变数组
NSMutableArray :可变数组
@interface NSMutableArray <ObjectType> : NSArray <ObjectType>
所以NSArray所具有的性质,NSMutableArray都继承了
一、创建
NSArray *array1 = [NSArray arrayWithObject:@"arr1"];
nil是数组元素结束的标记
NSArray *array2 = [NSArray arrayWithObjects:@"arr1", @"arr2", nil];
快速创建一个NSArray对象
NSArray *array3 = @[@"arr1", @"arr2", @"arr3"];
二、元素个数
arr.count
三、数组元素访问
[arr objectAtIndex:1];
arr[0];
arr.firstObject;
arr.lastObject;
四、数组遍历
- for循环遍历方式
-(void)readArrayOne{
NSArray *array = @[@"arr1", @"arr2", @"arr3"];
NSUInteger i;
for (i=0; i<array.count; i++) {
NSLog(@"%@",array[i]);
}
}
- 快速遍历方式
-(void)readArrayTwo{
//Objective-C 2.0引入了快速遍历这一功能,快速遍历与NSEnumerator差不多,然而语法更为简洁,它为for循环开设了in关键字,简化了遍历collection所需的语法,例如遍历数组:
NSArray *iosArray = @[@"L", @"O", @"V", @"E", @"i", @"O", @"S"];
for (NSString *obj in iosArray) {
//处理数组中的数据
NSLog(@"%@", obj);
}
}
- 装13遍历方式
-(void)readArrayThree{
NSArray *array = @[@"福",@"尔",@"摩",@"洪"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%ld - %@", idx, obj);
if (idx == 0)
{
// 停止遍历
*stop = YES;
}
}];
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
}
五、NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"arr1", @"arr2", nil];
- 添加元素
[array addObject:@"福尔摩洪"];
- 删除所有元素
[array removeAllObjects];
- 删除指定的对象
[array removeObject:@"jack"];
[array removeObjectAtIndex:0];
六、补充
- 数组转字符串
/**
数组转字符串,以 逗号 为分隔符
*/
-(void)arrChageToStr{
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"福尔摩洪", @"Superman", nil];
NSString *arrStr = [array componentsJoinedByString:@","];
NSLog(@"%@",arrStr);
}
- 将字符串切割为数组
/**
将字符串切割为数组, 以 逗号 切割
*/
-(void)strChangeToArr{
NSString * String =@"西瓜,冬瓜,南瓜";
NSArray * Array = [String componentsSeparatedByString:@","];
NSLog(@"%@",Array);
}
七、提示
> @[]只能创建不可变数组NSArray
> OC数组不能存放nil值
> OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
> 这个array永远是空数组
> NSArray *array = [NSArray array];