NSArray
不可变数组。OC中的集合不再是单纯的数组,而范围了三大类:数组、字典、集。
学习数组,首先明白一下几个内容:
* 数组分为不可变数组(NSArray)与可变对象(NSMutableArray);
* 只能装对象,基本数据类型包装成NSNumber,复杂类型包装成NSValue;
* nil作为结束标示;
* 下标从0开始;
* 数组中的元素不一定为一个类型,可以存在NSString,也可以存在NSNumber。
常用方法
与不可变字符串NSString类似,不可变数组NSArray操作也不在原数组上进行,而是通过返回一个新的数组来操作。
* 初始化
* 获取数组元素个数
* 添加元素
* 查找元素
* 获取元素
* 截取部分元素
* 数组排序
初始化
简化操作
1. NSArray *array1 = @[@"1", @"2", @"3"];
实例方法
1. // 按元素初始化(常用)
2. NSArray *array2 = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", nil];
3. 4. // 按已有的数组进行初始化(初始化出来和array1的元素相同)
5. NSArray *array3 = [[NSArray alloc] initWithArray:array1];
遍历构造
1. NSArray *array4 = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
2. NSArray *array5 = [NSArray arrayWithArray:array1];
获取数组元素个数
获取数组元素个数的方法与NSString获取长度有区别,使用的是count,而不是length。
1. NSUInteger count1 = [array1 count];
2. NSUInteger count2 = array1.count;
添加元素
1. // 从尾部追加一个元素
2. NSArray *array6 = [array1 arrayByAddingObject:@"4"];
3. 4. // 从尾部依次追加array2中的元素
5. NSArray *array7 = [array1 arrayByAddingObjectsFromArray:array2];
查找元素
是否包含某元素
1. BOOL isContain = [array2 containsObject:@"1"];
元素具体位置
查找并返回元素的具体位置,如果没找到,返回NSNotFound。 1. NSUInteger index = [array2 indexOfObject:@"2"]; 2. NSLog(@"是否找到 = %d", index == NSNotFound);
获取元素
存入的是什么类型,取出的时候,就需要什么类型去接收。
根据下标获取元素
1. // 两种取值方式等价
2. NSString *string1 = array2[0];
3. NSString *string2 = [array2 objectAtIndex:0];
1. // 取出一个与最后一个元素
2. NSString *string3 = [array2 firstObject]; // 第一个元素
3. NSString *string4 = [array2 lastObject]; // 最后一个元素
截取部分元素
通过给定范围,截取数组元素中的部分元素,存入新数组。 1. NSArray *array8 = [array2 subarrayWithRange:NSMakeRange(0, 2)];
数组排序
一般的字符串数组排序会使用到NSString提供的compare:或caseInsensitiveCompare:方法,然后调用sortedArrayUsingSelector达到对array2中,存储的字符串进行排序的目的。
1. NSArray *array9 = [array2 sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
注意上面写法的几点要求:
1. array2数组中存储的全是字符串;
2. 比较大小需要传的@selector类型中,caseInsensitiveCompare是字符串中的方法;
3. 这里选择器@selector返回值类型必须是NSComparisonResult。
根据这几点要求,我们可以写出自己的比较大小的方法,练习如下:
1. 创建一个Person类;
2. Person类有一个成员变量name;
3. 初始化多个Person,并给出不同的name值;
4. 将初始化出来的Person对象存入NSArray;
5. 根据name的大小,对Person进行升序排列。
实现如下:
1.创建Person类,并给出成员变量name,并实现响应的getter / setter方法;
2.为了输出方便,重写description方法,返回name;
3.
