可变数组和不可变数组的创建和用法
如果可变数组定义为实例变量,应该先初始化再去用它
- (void)viewDidLoad {
[super viewDidLoad];
//不可变数组: 11是标量, @11才是OC对象
NSArray *arr1 = @[@11,@22,@33];
//由于'@11'是OC对象,所以是NSNumber类型
for (NSNumber *num in arr1) {
//OC对象的比较应该用isEqual函数
if ([num isEqual:@33]) {
break;
}
NSLog(@"%@", num);
}
[arr1 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//当条件成立时,还会将此函数执行一次
if (idx == 1) {
*stop = YES;
}
NSLog(@"%ld----->%@", idx, obj);
}];
//可变数组
NSMutableArray *mutArr = [NSMutableArray arrayWithObjects:@11,@21 , nil];
NSLog(@"%@", mutArr);
//在末尾增加
[mutArr addObject:@31];
//在指定位置增加
[mutArr insertObject:@123 atIndex:1];
//删除
[mutArr removeLastObject];
//包含
if ([mutArr containsObject:@11]) {
NSLog(@"contanin @11");
}
NSLog(@"%@", mutArr);
}
判断数组可不可变
- 不管是可变数组还是不可变数组, 用".copy"方法产生的数组都是不可变数组。
- 不管是可变数组还是不可变数组, 用".mutableCopy"方法产生的数组都是可变数组。
NSArray *arr = @[@11, @22, @33];
NSMutableArray *mutArr1 = arr.copy;
NSMutableArray *mutArr2 = arr.mutableCopy;
NSMutableArray *mutArr3 = mutArr2.mutableCopy;
判读拷贝的方式是否会产生新的对象
不可变数组用".copy"方法拷贝的不会产生新的对象,其余都会产生新的对象
NSArray *arr = @[@11, @22, @33];
NSArray *arr1 = arr.copy;
NSMutableArray *arr2 = arr.mutableCopy;
NSLog(@"%p",arr); //0x7fbac866a720
NSLog(@"%p",arr1); //0x7fbac866a720
NSLog(@"%p",arr2); //0x7fbac8666520
NSLog(@"--------");
NSMutableArray *mutArr = @[@11, @22].mutableCopy;
NSArray *mutArr1 = mutArr.copy;
NSMutableArray *mutArr2 = mutArr.mutableCopy;
NSLog(@"%p", mutArr); //0x7fbac8472750
NSLog(@"%p", mutArr1); //0x7fbac8478730
NSLog(@"%p", mutArr2); //0x7fbac845fbf0
数组的简单用法
- 调换数组的顺序
NSMutableArray *mutArr = @[@11, @22, @33, @44, @55].mutableCopy;
for (NSInteger i = 0; i < mutArr.count / 2; i++) {
[mutArr exchangeObjectAtIndex:i withObjectAtIndex:mutArr.count - 1 - i];
}
NSLog(@"%@", mutArr);
NSLog(@"%@", mutArr.reverseObjectEnumerator.allObjects);
- 判断数组是否相等
NSArray *arr = @[@11, @22, @33, @44];
NSArray *arr2 = @[@11, @22, @33, @44];
if ([arr isEqualToArray:arr2]) {
NSLog(@"----->Equal");
}
- 数组和字符串的转换
NSArray *arr = @[@11, @22, @33, @44];
NSString *str = [arr componentsJoinedByString:@"_"];
NSLog(@"--->%@", str);
NSArray *arr2 = [str componentsSeparatedByString:@"_"];
NSLog(@"%@", arr2);
- 查询数组中是否存在某一个对象,如果存在返回所在下标
NSArray *arr = @[@11, @22, @33, @44];
NSInteger index1 = [arr indexOfObject:@33];
NSLog(@"%ld", index1);
NSUInteger index2 = [arr indexOfObject:@55];
NSLog(@"%ld", index2);
if (index2 == NSNotFound) {
NSLog(@"---->No Found");
}
- 排序
NSArray *array3 = @[@22,@1234,@456,@32,@67,@889,@990,@1234,@666];
NSArray *resultArray = [array3 sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return obj1 > obj2;
}];