#pragma mark -01-NSArray的使用
1. NSArray.
1). 是Foundation框架中的1个类. 是OC中的数组.
NSArray对象是1个数组对象,存储多个数据的.
2). C语言的数组的特点
a. 元素类型相同.
b. 长度固定.
c. 每1个元素是连续的.
3). OC数组的特点
1).NSArray数组中只能存储OC对象. 非OC对象无法存储.
2).长度固定. 一旦创建.数组中的元素无法新增和删除.甚至元素的值都无法更改.
3).NSArray数组中的每1个元素仍然是连续的.仍然有下标/索引.
4).NSArray数组的元素的类型是id类型的.
2. NSArray数组的创建.
1). 它是1个类 要创建对象才可以使用.
NSArray *arr1 = [NSArray new];
NSArray *arr2 = [[NSArray alloc] init];
NSArray *arr3 = [NSArray array];
这么创建出来的数组的元素的个数是0个.
这么创建没有意义.因为NSArray数组无法新增元素.
2). 第二种创建NSArray数组的方式.
NSArray *arr1 = [NSArray arrayWithObject:@"jack"];
创建了1个长度为1的数组,这个元素的值是@"jack"
这样写是没有意义的.
3). 最常用的方式:
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ...
NSArray *arr1 = [NSArray arrayWithObjects:@"jack",@"rose",@"lily",@"lelei",nil];
创建1个NSArray数组.并指定数组的元素的值.将每1个元素的值挨个挨个的写好.
当所有的元素写完毕之后,记住后面跟1个nil
这个时候nil代表结束. 代表元素在这个地方结束
再次强调:
1). 当我们将所有的元素写完以后,最后一定要跟1个nil
2). 如果你把nil放在前面,就会认为元素到此结束.
3). NSArray数组中只能存储OC对象.非OC对象是无法存储的.
可以存储任意的OC对象,但是如果指针的值是nil就会认为结束.
4).最最常用的创建NSArray数组的方式.
创建NSArray对象的简写方式.
NSArray *arr = @[@"jack",@"rose",@"lily"];
记住:这种写法,后面不需要加nil
NSArray数组中无法存储nil
nil 就是 NULL 就是 0 就是1个基本数据类型.
3. NSArray数组的使用
1). 使用%@就可以直接输出NSArray数组中的元素的值.
需要注意的时候,如果存储的是中文字符串,输出的就是这个中文字符串对应的unicode编码.
用%@打印整个NSArray数组对象的时候,如果元素是字符串的中文 就会有乱码.
2). NSArray数组不能存储nil
4. 如何取出存储在NSArray数组中的数据.
1). 使用中括弧写下标来取指定元素的值.
NSArray *arr = @[@"jack",@"rose",@"lily",@"jim",@"lilei",@"中文"];
NSLog(@"arr[1] = %@",arr[5]);
需要注意的时候,如果使用下标取出来的元素是1个中文字符串,是可以正常输出的.
2). 调用数组对象的方法也可以取出指定下标元素的值.
- (ObjectType)objectAtIndex:(NSUInteger)index;
ObjectTyoe ---- id
5. NSArray数组对象的其他的常用方法.
1). 得到数组的长度. 得到数组的元素的个数.
@property (readonly) NSUInteger count;
2). 获取数组中指定下标元素的值.
- (ObjectType)objectAtIndex:(NSUInteger)index;
如果下标越界,运行必报错.
3). 判断数组中是否包含指定的元素.
- (BOOL)containsObject:(ObjectType)anObject;
4). 取到数组中的首个元素.
@property (nullable, nonatomic, readonly) ObjectType firstObject
如果使用下标0去取,如果数组的长度为0 那么就会报错.
如果使用firstObject取,就返回nil 不会报错.
5). 取到数组中的末尾元素.
@property (nullable, nonatomic, readonly) ObjectType lastObject;
6). 查找指定的元素在数组中第1次出现的下标.
- (NSUInteger)indexOfObject:(ObjectType)anObject;
如果没有找到,就返回NSNotFound.就是NSUInteger的最大值.
6. 遍历NSArray数组
1). 使用for循环, 将每1个元素的下标遍历出来.通过下标取值.
NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"];
for(int i = 0; i < arr.count;i++)
{
NSLog(@"%@",arr);
NSLog(@"%@",[arr objectAtIndex:i]);
}
2). 使用增强for循环来遍历NSArray数组.
a. 语法格式
for(元素类型 变量名 in 数组名)
{
变量名的值就是数组中每1个元素的值.
}
迭代变量.
b. 执行原理.
将数组中第0个元素的值赋值给迭代变量. 然后执行循环体.
将数组中第1个元素的值赋值给迭代变量. 然后执行循环体.
将数组中第2个元素的值赋值给迭代变量. 然后执行循环体.
将数组中第4个元素的值赋值给迭代变量. 然后执行循环体.
.....
将数组中最后1个元素的值赋值给迭代变量. 然后执行循环体.
自动结束循环.
c. 如何使用增强for循环来遍历NSArray数组.
-> 迭代变量的类型写数组中真真存储的数据的类型.
-> 迭代变量的名称可以随便写 因为它仅仅是1个变量.
-> in是固定的.
-> 要遍历那1个数组 就把数组写在in后面就可以了.
-> 在循环体中,迭代变量的值就是数组中每一个元素的值.
如果数组中存储的数据的类型不一致.迭代变量建议使用id.
3). 使用block来遍历NSArray数组.
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
这个方法的作用: 遍历数组中的每1个元素.
NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop){
//obj: 遍历出来的这个元素的值.
//idx: 遍历出来的这个元素的下标.
NSLog(@"arr[%lu] = %@",idx,obj);
//如果你想要停止遍历,就给这个stop指针指向的变量赋值为YES;
if(idx == 2)
{
*stop = YES;
}
}];
7. NSArray与字符串相关的方法.
- (NSString *)componentsJoinedByString:(NSString *)separator;
使用指定的分隔符将数组中的每一个元素拼接成1个新的字符串.
- (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;
以指定的字符串分隔
#pragma mark -02-NSMutableArray的使用
1. NSMuatableArray
是Foundation框架中的一个类.它是NSArray的子类.
所以.NSMuatableArray和NSArray一样,也是1个数组.
并且NSArray具备的功能,NSMuatableArray肯定都有.
NSMutableArray相对于父类做的扩展: 这个数组中的元素可以新增和删除.其他的用法和NSArray一样
NSArray叫做不可变数组.
NSMuatableArray叫做可变数组.
2. NSMuatableArray的创建.
NSMutableArray *arr1 = [NSMutableArray new];
NSMutableArray *arr2 = [[NSMutableArray alloc] init];
NSMutableArray *arr3 = [NSMutableArray array];
这种方式创建出来的数组的长度为0.但是这个是有意义.
因为这个数组的元素可以动态的新增和删除.
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ...
这样创建也是可以的.但是一样 最后给1个nil
特别注意这样是不行的
NSMutableArray *arr4 = @[@"jack",@"rose",@"lily"];
@[@"jack",@"rose",@"lily"];这是创建NSArray的简写方式 这个是1个NSArray对象.
3. 为NSMutableArray数组新增元素.
1).NSMutableArray数组刚创建出来的时候,这个数组的长度是0.
每新增1个元素,才动态的为这个数组新增1个元素.
2). 新增元素的方法.
- (void)addObject:(ObjectType)anObject;
将数组中的每1个元素取出来新增到当前这个可变数组中.
- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;
4. 删除元素,
1). 根据下标来删除数组中的元素.
- (void)removeObjectAtIndex:(NSUInteger)index;
2). 删除数组中的最后1个元素
- (void)removeLastObject;
3). 清空数组中的所有的元素.
- (void)removeAllObjects;
4). 删除数组中指定的元素.
- (void)removeObject:(ObjectType)anObject;
所有删除.
5). 删除指定范围的元素
- (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;
6). 元素的插入:
- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |