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