美文网首页
objective-c NSArray

objective-c NSArray

作者: 一世长安乱 | 来源:发表于2018-04-10 16:41 被阅读0次

    使用注意##

    • 只能存放任意OC对象,有顺序
    • 是不可变的,一旦初始化完毕,内容固定,不能删除里面的元素,也不能添加

    创建方式##

    NSArray *arr1 = [NSArray arrayWithObject:@"lalal"];
    //nil是结束符号,也可以保存对象
    NSArray *arr2 = [NSArray arrayWithObjects:@"lalal", @"hahaha", @"buyiyang", nil];
    //和上一句等价
    NSArray *arr3 = @[@"lalal", @"hahaha", @"buyiyang"];
    
    //返回数组长度
    [arr count];
    //获取数组最后一个元素
    [arr lastObject];
    //获取数组第一个元素
    [arr firstObject];
    //获取第3个元素
    [arr objectAtIndex:3];
    //获取元素简写和C语言差不多
    arr[3];
    
    //是否包含某个元素,返回BOOL值
    [arr containsObject:@"元素"];
    

    遍历##

    1.C语言中常规遍历
    2.OC增强for循环遍历
    这里写图片描述
    NSArray *arr = @[@"lalal", @"hahaha", @"buyiyang"];
    for (NSString *str in arr) {
        NSLog(@"%@", str);
    }
    //输出为
    //NSArray[3837:670457] lalal
    //NSArray[3837:670457] hahaha
    //NSArray[3837:670457] buyiyang
    
    3.使用OC数组的迭代器来遍历
    这里写图片描述

    点回车


    这里写图片描述

    每取出一个元素就会调用一次block
    每次调用block都会讲当前取出的元素和元素对应的索引传递出来
    stop用于控制什么时候停止遍历


    这里写图片描述
    4.给数组中的对象发送消息
    这里写图片描述
    NSArray *arr = @[p1, p2, p3 ,p4];
    //如果使用OC数组存储对象,可以调用OC数组的方法让数组中所有元素都执行指定方法
    //注意:如果数组中保存的不是相同类型的数据,没有相同的办法,就会报错
    //[arr makeObjectsPerformSelector:@selector(funName)];
    [arr makeObjectsPerformSelector:@selector(funName:) withObject:@"blablabla"];
    

    数组排序##

    这里写图片描述
    NSArray *arr = @[@10, @20, @30, @8];
    //注意:想使用compare方法对数组中的元素进行排序,那么数组中的元素必须是Foundation框架中的对象
    NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"%@", newArr);
    
    这里写图片描述
    //自定义类元素成员变量排序·
    Person *p1 = [[Person alloc] init];
    p1.age = 10;
    Person *p2 = [[Person alloc] init];
    p2.age = 20;
    Person *p3 = [[Person alloc] init];
    p3.age = 4;
    Person *p4 = [[Person alloc] init];
    p4.age = 13;
    NSArray *arr = @[p1, p2, p3, p4];
    NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(Person  * _Nonnull obj1, Person   * _Nonnull obj2) {
    //每次调用该block都会取出数组中的两个元素
    //二分
    //大于小于号用来调整排序顺序
        return obj1.age > obj2.age;
    }];
    NSLog(@"%@", newArr);
    

    该方法


    这里写图片描述

    点击回车,block点击回车都会出现代码


    这里写图片描述

    NSArray和NSString转换##

    //将数组中的元素用-连接起来
    NSArray *arr = @[@"aa", @"bb", @"cc"];
    NSString *str = [arr componentsJoinedByString:@"-"];
    NSLog(@"%@", str);
    
    这里写图片描述
    这里写图片描述
    //通过字符串生成一个数组
    NSString *str = @"aa-bb-cc";
    NSArray *arr = [str componentsSeparatedByString:@"-"];
    NSLog(@"%@", arr);
    
    这里写图片描述

    NSArray文件读写##

    1.将数组写入文件中

    通常保存为.plist文件


    这里写图片描述
    NSArray *arr = @[@"aa", @"bb", @"cc"];
    //1.将数组写入文件中
    //数组写入文件其实是一个XML
    //在iOS开发中一般情况下将XML保存为.plist
    BOOL flag = [arr writeToFile:@"/Users/y1shichanganluan/Desktop/abc.plist" atomically:YES];
    

    2.从文件中读取一个数组

    这里写图片描述
    //2.从文件中读取一个数组
    //arrayWithContentsOfFile只能写入数组中保存的Foundation框架中创建的而对象,如果是自定义对象则不能写入
    NSArray *arr = [NSArray arrayWithContentsOfFile:@"/Users/y1shichanganluan/Desktop/abc.plist"];
    NSLog(@"%@",arr);
    

    NSMutableArray##

    1.创建空数组
    NSMutableArray *arr = [NSMutableArray array];
    
    2.创建固定长度的空数组
    //数组长度为4
    NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:4]
    
    3.创建数组包含元素,由父类NSArray继承
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"lalal", @"hahaha", nil];
    
    4.添加
    这里写图片描述
    [arr addObject:@"hehehhe"];
    //将数组中的元素取出再添加
    [arr addObjectsFromArray:@[@"ajdsfasd", @"asdfsd"]];
    
    5.插入
    这里写图片描述
    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"lalal", @"hahaha", nil];
    [arr addObject:@"hehehhe"];
    [arr addObjectsFromArray:@[@"ajdsfasd", @"asdfsd"]];
    [arr insertObject:@"sdfasdfasd" atIndex:3];
    NSRange range = NSMakeRange(2, 2);
    NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
    //插入数据,指定数组需要插入的位置,和插入多少个
    [arr insertObjects:@[@"sadfs", @"sadfdsf"] atIndexes:set];
    NSLog(@"%@", arr);
    
    6.删除
    [arr removeObject:(nonnull id)];
    [arr removeObjectAtIndex:NSUInteger)];
    [arr removeLastObject];
    [arr removeObjectsInArray:(nonnull NSArray *)];
    [arr removeObjectsAtIndexes:(nonnull NSIndexSet *)]
    [arr removeAllObjects];
    
    7.替换
    [arr replaceObjectAtIndex:(NSUInteger) withObject:(nonnull id)];
    [arr replaceObjectsAtIndexes:(nonnull NSIndexSet *) withObjects:(nonnull NSArray *)];
    [arr replaceObjectsInRange:(NSRange) withObjectsFromArray:(nonnull NSArray *)];
    [arr replaceObjectsInRange:(NSRange) withObjectsFromArray:(nonnull NSArray *) range:(NSRange)];
    //最简单的办法就是用C语言的数组
    arr[0] = @"";
    
    8.获取
    arr[0];
    
    9.注意
    不能通过@[ ]来创建一个可变数组,@[ ]是用来创建一个不可变得数组,强行使用会引发运行错误
    

    相关文章

      网友评论

          本文标题:objective-c NSArray

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