接下来要总结的是oc中的集合类,NSArray,NSDictionary以及NSSet。
首先是NSArray:
oc数组有两种:NSArray(不可变的数组)和NSMutableArray可变的数组),其中NSArray是NSMutableArray的父类.
//NSArray
//创建
//创建不可变数组,空的数组,不能在里面放东西,不用!!
NSArray *array = [NSArray array];
//创建有多个元素的数组,nil 是结束的标志,不能缺少
NSArray *array2 = [[NSArray alloc] initWithObjects:@"apple", @12, nil];
NSArray *array3 = [NSArray arrayWithObjects:@"as", @14, nil];
NSArray *array4 = [NSArray arrayWithObject:@"www"]; //只有一个元素
//创建数组,里面的元素为参数数组中的元素
NSArray *array5 = [NSArray arrayWithArray:array2];
//快速创建不可变的数组,推荐使用!!但是只能用于 NSArray,而不能用于 NSMutableArray。
NSArray *array6 = @[@"apple", @"cc", @89, array3];
//获取数组中元素的个数,不包含结束标志,只包含有效的元素个数
NSUInteger count = array6.count;
//访问数组中的元素:
//1.根据索引位置获取
id obj1 = [array6 objectAtIndex:0];
//2.采用c的数组的访问方式
id obj2 = array6[1];
//遍历数组
//1.循环
for (int i=0; i<array6.count; i++) {
id obj = [array6 objectAtIndex:i];
NSLog(@"array6[%i] --- %@",i,obj);
}
//2.for in,快速遍历,取出数组中的每个对象
for (id obj in array6) {
NSLog(@"%@", obj);
}
//3.利用block遍历
[array6 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"第 %lu 个元素是 %@",idx,obj);
if (idx==1) {
*stop = YES; //到下标 为1,之后跳出循环,停止遍历
}
}];
//NSMutableArray
//创建可变的空数组
NSMutableArray *ary1 = [NSMutableArray array];
//添加一个元素
[ary1 addObject:@"apple"];
//添加多个元素,多个元素要放到一个数组中
[ary1 addObjectsFromArray:@[@21, @"ios", @"apple", @"apple"]];
//删除指定元素(如果该元素出现多次,那么多次出现的都删掉)
[ary1 removeObject:ary1[0]];
//根据索引位置删除元素
[ary1 removeObjectAtIndex:0];
//删除同时存在于后面数组中的元素
[ary1 removeObjectsInArray:@[@"c", @"java"]];
//删除最后一个元素
[ary1 removeLastObject];
//在指定的范围内查找删除某个元素
[ary1 removeObject:@"c" inRange:NSMakeRange(0, 1)];
//删除所有的元素
[ary1 removeAllObjects];
//删除指定范围内的元素
[ary1 removeObjectsInRange:NSMakeRange(0, 1)];
//插入一个元素
[ary1 insertObject:@"apple" atIndex:3];
//重新设置数组中的元素
[ary1 setArray:@[@"as", @21, @"ask"]];
//在指定的索引位置替换元素
[ary1 replaceObjectAtIndex:1 withObject:@"1"];
//用新的数组去替换指定范围内的元素:元素的个数不需要和原来的个数一致
[ary1 replaceObjectsInRange:NSMakeRange(0, 2) withObjectsFromArray:@[@"a", @"n", @43]];
//交换两个指定索引位置的元素
[ary1 exchangeObjectAtIndex:0 withObjectAtIndex:1];
//数组排序
//把数组中字符串排序
//方式一:冒泡 升序
for (int i=0; i<muAry.count; i++) {
for (int j=0; j<muAry.count-i-1; j++) {
if ([muAry[j] compare: muAry[j+1]] == NSOrderedDescending) {
[muAry exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
//方式二:sortedArrayUsingSelector:只能是默认的升序排列 }
NSArray *sortAry = [ary sortedArrayUsingSelector:@selector(compare:)];
//方式五三:根据某些条件,将数组中的元素排序。
//假定数组中的元素是几个学生类的对象
NSArray *stuAry = @[stu1,stu2,stu3];
//按照学号降序排列,参数一:用于排序的属性名;参数二:升序还是降序的布尔值。
NSSortDescriptor *des1 = [NSSortDescriptor sortDescriptorWithKey:@"num" ascending:NO];
NSArray *stuSortAry = [stuAry sortedArrayUsingDescriptors:@[des1]];
}