#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;
|