搜索
您的当前位置:首页正文

数组(可变、不可变)

来源:知库网

可变数组和不可变数组的创建和用法

如果可变数组定义为实例变量,应该先初始化再去用它

- (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);
}

判断数组可不可变

  1. 不管是可变数组还是不可变数组, 用".copy"方法产生的数组都是不可变数组。
  2. 不管是可变数组还是不可变数组, 用".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

数组的简单用法

  1. 调换数组的顺序
    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);
  1. 判断数组是否相等
    NSArray *arr = @[@11, @22, @33, @44];
    NSArray *arr2 = @[@11, @22, @33, @44];
    if ([arr isEqualToArray:arr2]) {
        NSLog(@"----->Equal");
    }
  1. 数组和字符串的转换
    NSArray *arr = @[@11, @22, @33, @44];
    NSString *str = [arr componentsJoinedByString:@"_"];
    NSLog(@"--->%@", str);
    NSArray *arr2 = [str componentsSeparatedByString:@"_"];
    NSLog(@"%@", arr2);
  1. 查询数组中是否存在某一个对象,如果存在返回所在下标
    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");
    }
  1. 排序
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;
    }];
Top