1.不可变数组(NSArray)
* 通过下标索引对象
①通过下标获取元素
相同点:都是获取数组中的第一个元素.
不同点:当数组中的元素个数为零时,使用第一个方法程序会报错.使用第二个方法程序会 返回nil.程序可以继续执行,
1).不可变数组(NSArray)
*数组中只能存放对象.但是对于对象的类型没有限制.
* 实例化的时候以nil表示结束* 通过下标索引对象
* NSArray无法添加.删除.修改元素.
2).创建对象,数组初始化赋值方法.
//通过初始化添加数组元素
NSArray *array = [[NSArray alloc] initWithObjects:
@"dd",@"asdf",@"duc" ,@"xiaozhang",nil];
NSLog(@"%@",array);
//通过便利构造器方法添加数组元素
NSArray *array1 = [NSArray arrayWithObjects:@"asd",@"asdf",nil];
NSLog(@"%@",array1);
//笑笑语法,语法糖 ---- 字面量
NSArray *array = @[@"aa",@"asd",@"ddd",@"dd"];
NSLog(@"%@",array);
3).%p与%@的区别
Person *per = [[Person alloc] init];
NSString *str = [NSString stringWithFormat:@"frank"];
NSLog(@"%@",per);//decription
NSLog(@"%@",str);//frank
NSLog(@"%p",per);//0x100108120 指针变量存储的地址
NSLog(@"%p",&per);//0x100108120 指针per的地址
4).数组常见操作
①通过下标获取元素
//数组的下标
NSArray *array = [NSArray arrayWithObjects:@"sda",@"das",@"saad",nil];
NSUInteger count = [array count];//数组元素个数
NSLog(@"%ld",count);
//根据下标取出元素.
//NSString *str = [array objectAtIndex:6];//角标越界
NSString *str = [array objectAtIndex:2];//角标越界
NSLog(@"%@",str);//saad
NSString *str1 = [array objectAtIndex:0];//第一个元素
NSString *str2 = [array firstObject];//第一个元素
NSLog(@"%@",str1);
NSLog(@"%@",str2);
NSString *str3 = [array objectAtIndex:count - 1];//最后一个人
NSString *str4 = [array lastObject];//最后一个
NSLog(@"%@",str3);
NSLog(@"%@",str4);
注: objectAtIndex:count - 1 与 lastObject 方法的区别
相同点:都是获取数组中的第一个元素.
不同点:当数组中的元素个数为零时,使用第一个方法程序会报错.使用第二个方法程序会 返回nil.程序可以继续执行,
②.判断元素是否存在
NSArray *arr = [[NSArray alloc] initWithObjects:@"asdf",@"ddd",@"ccc" ,nil];
BOOL isContain = [arr containsObject:@"ddd"];
③.根据对象获取下标
//根据对象获取下标
NSUInteger index = [arr indexOfObject:@"ddd"];
NSLog(@"%ld",index);
//NSRange range = NSMakeRange(1,1);
//NSUInteger index1 = [arr indexOfObject:@"ccc" inRange:range];
//NSLog(@"%ld",index1);
④.不可变数组遍历
NSArray *arr = [[NSArray alloc] initWithObjects:@"asdf",@"ddd",@"ccc" ,nil];
for (NSInteger i = 0;i < [arr count]; i++) {
NSLog(@"%@",[arr objectAtIndex:i]);
}
//for in
for (NSString *temp in arr) {
NSLog(@"%@",temp);
}
//NSNumber 类 有接口,有实现
//NSInteger 基本数据类型
//20 是整型数据 @20 整形对象 NSNumber
NSArray *str1 = [NSArray arrayWithObjects:@34,@254,@20,@42,nil];
for (NSNumber *num in str1) {
NSLog(@"%@",num);
}
5).可变数组(NSArray)
可变数组与不可变数组的区别:
增加了增删除功能,即在原有的对象基础上做修改.
①创建对象
//快速创建NSMutableArray对象,笑笑语法
NSMutableArray *array1 = [@[@"aa",@"dd",@"asd"] mutableCopy];
//NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:1];
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
//NSMutableArray *mutableArray1 = [NSMutableArray arrayWithObjects:
@"asd",@"afg",@"dggd",@"fgads",nil];
②往数组中添加元素
//(1).添加一个元素
[mutableArray addObject:@"asd"];
NSLog(@"%@",mutableArray);
//(2).插入一个元素.
[mutableArray insertObject:@"cdd" atIndex:0];
NSLog(@"%@",mutableArray);
③替换元素
[mutableArray replaceObjectAtIndex:0 withObject:@"hhe"];
NSLog(@"%@",mutableArray);
④交换下标对应元素
[mutableArray exchangeObjectAtIndex:0 withObjectAtIndex:1];
NSLog(@"%@",mutableArray);
⑤移除元素
[mutableArray removeAllObjects];
NSLog(@"%@",mutableArray);
(1)移除指定元素
[mutableArray removeObject:@"asd"];
NSLog(@"%@",mutableArray);
(2)移除指定下标对应的元素
[mutableArray removeObjectAtIndex:0];
NSLog(@"%@",mutableArray);
(3)移除所有元素
[mutableArray removeAllObjects];
NSLog(@"%@",mutableArray);
⑥ 快速遍历
for (NSString *str in mutableArray) {
NSLog(@"%@",str);
}
注:
数组中可以存放相同的元素.
数组的使用场景:当需要一个有序的集合来管理对象时,就使用数组.