• Object C学习笔记11-数组


      在Object C也提供了类似C#中的Array数组对象,在Object C中使用NSArray 来创建数组;但是在Object C中NSArray 只能存放对象类型的指针,不能存放int,char,double等基本数据类型。

      一. 不可变数组对象

        这个和之前的NSString有些类似,NSArray 能够创建不可变的数组对象。一旦初始化这个对象就不能动态的修改和增加这个数组。

        (1)使用arrayWithObjects来初始化数组内容,参考如下代码:

    NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf"];

        上面初始化了一个items数组对象,但是值得注意的是,这段代码会报错,在Object C中数组对象的创建有个特殊的地方,就是最后一个元素必须是nil,这意味着使用nil来标识数组对象的结束。正确的方式如下:

    NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];

        (2)可以使用count方法来获取数组的长度

    NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];
    NSLog(@"%d",[items count]);

        以上代码得到的值是2,还是3呢,一般人都会认为是3,但是这个数组的长度是2,上面已经提过了nil只是作为一个结束标识符,并不能代表素组内容。现在修改代码如下:

    NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil,nil];
    NSLog(@"%d",[items count]);

        得到的数组长度仍然为2,在第一个nil的位置就已经标识数组结束了,所以后面出现再多的数组元素都没有作用。

        (3)使用objectAtIndex来获取某个索引位置的数组元素

    NSLog(@"%@",[items objectAtIndex:0]);

        以上代码可以获得素组对象items索引位置为0的元素,但是一定要注意数组的长度,否则数组越界异常。

        (4)使用for来遍历数组元素

    for(int i=0;i<[items count];i++){
                NSLog(@"%@",[items objectAtIndex:i]);
    }

        以上代码和我们平时使用遍历数组的方式无异,基本都是这种情况。但是for还有另外一种使用方式,和C#中的foreach使用方式一样。

    for(NSObject *item in items){
                NSLog(@"%@",item);
    }

      

      二. 动态数组

        (1)根据上面所描述的,大致可以猜得出来动态数组类,和NSMutableString比较类似。我们使用NSMutableArray来定义一个动态数组。而且NSMutableArray 还提供了一些方法动态像数组中添加元素,在NSMutableArray不用担心在添加元素的时候发生数组越界的问题,当NSMutableArray长度被占满之后会自动扩容。

    NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2];

        我们使用arrayWithCapacity来定义一个数组的容量。

        (2)可以使用addObject方法来向对象数组中添加元素,而且NSMutableArray和NSArray不一样,不需要使用nil来介绍标识数组结束。NSMutableArray中同样提供了count 方法来获取数组的长度,这里需要注意的是count和capacity 是不一样的,count是获取的实际长度,而capacity是可存放的长度。

    NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:12];
    [mutItems addObject:@"abc"];
    [mutItems addObject:@"def"];
    NSLog(@"%d",[mutItems count]);

        如果往muItems中继续添加元素,直到超过12个,muItems也不会报错,而且count也会大于12,这也是NSMutableArray的优势所在。

        (3)使用insertObject 在特定的位置添加元素

    NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2];
            [mutItems addObject:@"abc"];
            [mutItems addObject:@"def"];
            [mutItems addObject:@"45454"];
            NSLog(@"%d",[mutItems count]);
            
            [mutItems insertObject:@"wang" atIndex:1];
            for (NSString *item in mutItems) {
                NSLog(@"%@",item);
            }
    案例

        (4)删除数组中的元素

        - (void)removeObject:(id)anObject inRange:(NSRange)range;设置在一定范围内删除,如果在这个范围内没有匹配的元素则什么都不删除。

        - (void)removeObject:(id)anObject;删除指定元素

        - (void)removeObjectsInArray:(NSArray *)otherArray;删除数组中指定的元素

        - (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;删除指定索引位置的元素

    NSRange range=NSMakeRange(0, 2);
    [mutItems removeObject:@"wang" inRange:range];
    for (NSString *item in mutItems) {
        NSLog(@"----- %@",item);
    }

        (5)替换数组元素内容

        - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 可以使用这个方法来替换某个索引位置的元素

    [mutItems replaceObjectAtIndex:1 withObject:@"FFFFFFFFFFFFFF"];
            for(NSString *item in mutItems){
                NSLog(@"************ %@",item);
            }

        

      本文只是很初略的记录了学习的一些常用方法,NSArray和NSMutableArray 还提供了大量的其他方法,仍有待继续努力学习和使用!        

  • 相关阅读:
    动态规划解按摩师的最长预约时间
    C#中WinForm的Tab键顺序调整顺序
    内网穿透工具对比FRP+NPS+Zerotier与NAT服务器测试
    " " 和 ' ' 混用拼接html字符串,且含有事件,事件中有参数
    HAProxy在Windows下实现负载均衡与反向代理
    react 导入src外部的文件 Relative imports outside of src/ are not supported.
    11_实例
    C#删除指定目录下文件(保留指定几天前的日志文件)
    【转】系统创建定时执行任务bat批处理删除指定N天前文件夹的文件
    mariadb导如数据异常------Error Code: 1153
  • 原文地址:https://www.cnblogs.com/qingyuan/p/3585672.html
Copyright © 2020-2023  润新知