美文网首页
数组(可变、不可变)

数组(可变、不可变)

作者: Dove_Q | 来源:发表于2016-09-23 17:29 被阅读28次

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

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

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

    相关文章

      网友评论

          本文标题:数组(可变、不可变)

          本文链接:https://www.haomeiwen.com/subject/hdwtyttx.html