数组里存放的一定是对象
不可变数组
定义方法: NSArray *arr = [[NSArray alloc] init];
便利构造器:NSArray *arr = [NSArray array];
注意:定义的不可变空数组没有使用意义
赋初值方式:字面量方式
指令:NSArray *arr = @[@"1", @"2"];
取值方式:
指令:NSLog(@"%@", [arr objectAtIndex:1])
或者:NSLog(@"%@", arr[1])
遍历方式:
指令:for (NSInteger i = 0; i < arr.count; i++) {
NSLog(@"%@", arr[i]); }
注意:arr.count指令是数组长度的意思
具体的数组使用方法
1:判断一个元素是否在数组中
指令:NSLog(@"%d", [arrcontainsObject:@"6"]);
注意:该指令的头文件是BOOL类型返回值只有0和1所以用%d来接收,意思为6是否在arr中
遍历方法:
有一个数组:NSArray *arr = @[@"赵", @"钱", @"孙", @"李", @"fd"];
输出方式:NSLog(@"%@", arr);
注意:这种输出方式是错误的,因为打印汉字的时候直接打印是打印不出来的而英文可以,
(1)快速枚举法
指令:for (NSString *str in arr) {
NSLog(@"%@", str);}
注意:能快速的遍历数组等容器(数组,字典,集合)对象
为了增加代码的阅读性,避免不必要的错误,尽量让forin的前部分的类型和数组里元素类型相同
数组的嵌套
格式:NSArray *arr1 = @[@"赵", @"钱", @"孙", @"李", @"fd", @"123", @"1.23"];
NSArray *arr2 = @[@"赵大", @"钱二", @"孙三", @"李四", @"UFO", @"123", @"1.23"];
NSArray *arr = @[arr1, arr2];//嵌套(用一个大的数组,装下两个小的数组)
遍历嵌套数组
指令:for (NSArray *temp in arr) {//先对arr进行循环 arr当中的元素是数组,所以第一个参数是NSArray
for (NSString *str in temp){// 对arr当中的arr1和arr2进行遍历,因为arr1和arr2种的元素都为字符串所以第一个参数是NSString;
NSLog(@"%@", str);}}(双层forin);
可变数组
(个人理解):不可变数组效率很高, 但是在使用的时候不可变数组的应用范围很广泛,而且不需要频繁的定义数组,数组在使用之前一定要先创建,先初始化
定义方法:
普通方法:NSMutableArray *arr = [[NSMutableArray alloc] init];
便利构造器:NSMutableArray *arr1 = [NSMutableArray array];
1:可变和不可变数组之间的切换:
先定义:NSArray *arr =@[@"1",@"2", @"3"];(不可变数组);
转换指令:NSMutableArray *muArr = [NSMutableArrayarrayWithArray:arr];
先定义如下数组:
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", @"4", nil];(以下命令均以该数组为准)
2:添加一个字符串
指令:[arr insertObject:@"7" atIndex:2];
结果:1, 2, 7, 3, 4
3:移除下标2的字符串
指令:[arrremoveObjectAtIndex:2];
结果:1, 2, 4
4:插入一个字符串
指令:[arr insertObject:@"6" atIndex:1];
结果:1, 6, 2, 3, 4
5:替换一个字符串
指令:[arr replaceObjectAtIndex:0 withObject:@"10"];
结果:10, 2, 3, 4
6:交换两个字符串
指令:[arr exchangeObjectAtIndex:1 withObjectAtIndex:3];
结果:1, 4, 3, 2
7:清空数组
指令:[arr removeAllObjects];
结果( )
8:通过数组元素找到对应的下标
指令:[arr indexOfObject:"对应的元素"]