zoukankan      html  css  js  c++  java
  • Objective-C中NSArray的基本用法示例

    NSArray的一些用法

    NSArray只允许装OC对象,并且不能装空值,空代表数组元素的结束

    #pragma mark - NSArray的基本用法
    // 创建一个空数组
    NSArray *array = [NSArray array];
    // 创建有一个元素的数组
    array = [NSArray arrayWithObject:@"123"];
    // 创建有多个元素的数组
    array = [NSArray arrayWIthObjects:@"a",@"b",nil ];//不能装nil空指针,空值代表数组元素结束
    // 将一个数组赋值给一个数组
    + (instancetype)arrayWithArray:(NSArray *)array;
    // 获取元素的个数
    int count = [array count]; //和 count = array.count; 相同,都是调用get方法
    // 是否包含一个元素
    - (bool)containsObject:(id)anObject;
    // 返回最后一个元素
    - (id) lastObject;
    // 获取index位置的元素
    - (id)objectAtIndex:(NSUInteger) index;
    // 获取元素的位置
    - (NSUInteger) indexOfObject:(id)anObject;
    // 在range范围内查找元素的位置
    - (NSUInteger) indexofObject:(id)anObject inRange:(NSRange)range;
    // 比较两个集合内容是否相同
    - (Bool) isEqualToArray:(NSArray *)otherArray;
    // 返回两个集合中第一个相同的对象元素
    - (id) firstObjectCommonWithArray:(NSArray *)otherArray;
    #pragma mark - NSArray的高级用法
    //让集合里面的所有元素都执行aSelector这个方法
    - (void)makeObjectsPerformSelector:(SEL)aSelector;
    //让集合里面的所有元素都执行aSelector这个方法,给这个方法添加参数,但是只支持一个参数
    - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument
    //添加一个元素,返回一个新的NSArray(方法调用者本身没有发生变化)
    - (NSArray *)arrayByAddingObject:(id)anObject
    //添加otherArray的所有元素,返回一个新的NSArray(方法着本身没有改变)
    - (NSArray *) arrayByAddingObjectsFromArray:(NSArray *) otherArray;
    //截取range范围的数组
    - (NSArray *) subarrayWithRange:(NSRenge)range;
    //用separator做拼接符,拼接成一个字符串
    - (NSString *) componentsJoinedByString:(NSString *)separator
    //将NSArray持久化到文件中去
    - (Bool) writeToFile:(NSString *)path atomically:(Bool)useAuxiliaryFile
    #pragma mark - NSArray的遍历
    // 方法一:普通遍历(利用for循环)
    void arrayFor1(){
        NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
        int count = array.count;
        for(int i=0; i<count; i++){
            id obj = [array objectAtIndex:i];
            NSLog(@"%i-%@",i, obj);
        }
    }
    // 方法二:快速遍历
    void arrayFor2(){
        NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
        int count = array.count;
        int i=0;
        for(id obj in array){
            NSLog(@"%i-%@",i, obj);
            i++;
        }
    }
    // 方法三:利用block遍历
    void arrayFor3(){
        NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
        [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            NSLog(@"%zi->%@",idx, obj);
            //  *stop = YES; //改变外边的Bool,终止遍历
        }];
    }
    // 方法四:利用迭代器
    // 先介绍一下-->NSEnumerator迭代器:集合的迭代器,可以用于遍历集合元素,NSArray 有相应的方法来获取迭代器
    //获取一个正序遍历的迭代器
    - (NSEnumerator *) objectEnumerator;
    //获取一个反序遍历的迭代器
    - (NSEnumerator *) reverseObjectEnumerator;
    @常用方法:
    //获取下一个元素
    - (id) nextObject;
    //获取所有的元素
    - (NSArray *) allObjects
    void arrayFor4(){
        NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
        NSEnumerator *enumerator = [array objectEnumerator];// 返回数组的迭代器
        //如果放到遍历之后,则取到空,原因是,遍历完了,就没值了
        NSArray *array2 = [enumerator allObjects];
        NSLog(@"array2=%@", array2);
        
        //获取下一个需要遍历的元素
        id obj = nil;
        while (obj = [enumerator nextObject]) {
            NSLog(@"obj=%@", obj);
        }
    }

    使用block 块遍历整个数组

    这个block 需要三个参数:

    • id obj 表示数组中的元素
    • NSUInteger idx 标示元素的下标
    • boolbool *stop 是一个bool类型的参数
    • NSEnumerationReverse 标示 是从前向后遍历,还是从后往前遍历

    例一:

        NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
        [array enumerateObjectsUsingBlock:^(id str,NSUInteger index, BOOL* te){
            NSLog(@"%@,%d",str,index);
        }];

    例二:

        NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
        
        [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){
            NSLog(@"%@,%d",str,index);
        }];

    参考网站:

    http://www.jb51.net/article/72539.htm

  • 相关阅读:
    [洛谷P4585] [FJOI2015] 火星商店问题
    [bzoj4311] 向量
    [bzoj4977] [Lydsy1708月赛] 跳伞求生
    sdut-1153 C语言实验——求两个整数之中较大者
    sdut_1116
    sdut_1189
    汉诺塔
    二分查找
    类似二分查找算法
    [YTU]_2922(Shape系列-8)
  • 原文地址:https://www.cnblogs.com/jys509/p/5058228.html
Copyright © 2011-2022 走看看