• objective-c 数组对象 (5)


    使用数组对象创建的数组功能非常强大,在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型。而Objective-C语言可以在Array数组中放任意类型的数据,值得注意的是只能放指向这个对象的指针,如果直接放int ,char,double 等等,是不行的在Java语言或者C语言中定义的数组必须满足数组中的每一个元素必须是同样的类型。而Objective-C语言可以在Array数组中放任意类型的数据,

    用来存储对象的有序列表(任意类型的对象,不能存储数据类型比如 int bool char)

    限制: 只能存储ObjectiveC 的对象, 不能存储C 语言的基本数据类型 (intfloatenumstruct、 或者NSArray 中的随机指针) 。

    同时也不能存储nil(对象的零值或NULL值) 

    1.不可变数组对象

     
    使用NSArray关键字创建一个不可变的数组,一旦初始化完毕后这个数组的元素是不可以在动态的添加与删除。
    创建MyClass对象,将指向这个对象的指针也可以存入NSArray数组中,可见NSArray对象数组中可以储存任意对象的数据。
     
    [array count] : 得到这个对象数组的长度。
    [array objectAtIndex 0]: 传入数组脚标的id 得到数据对象。
    [arrayWithObjects; ...] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil。标志结束。
     

     使用了for遍历数组和快速枚举遍历。看momo说第二种的方法效率比较高。

    for(NSObject *object in array) : 遍历array这个数组,每一次循环将数组中的元素赋值给  *object ,实现循环遍历。

     

     1    MyClass *myClass =[[MyClass alloc]init];
     2     NSArray *array = [NSArray arrayWithObjects:@"xx",@"MOMO",@"yy",myClass,nil ];
     3     
     4     int count= [array count];
     5     
     6     NSLog(@"array count is %d" ,count);
     7     for(int i=0;i<count;i++){
     8         NSLog(@"i = %d value = %@",i,[array objectAtIndex:i]);
     9     }
    10     
    11     for (NSObject *object in array){
    12         NSLog(@"first for array:%@",object);
    13     }

    输出:

    2013-12-26 14:48:05.805 Helloworld20131021_Object[1421:c07] array count is 4

    2013-12-26 14:48:05.805 Helloworld20131021_Object[1421:c07] i = 0 value = xx

    2013-12-26 14:48:05.806 Helloworld20131021_Object[1421:c07] i = 1 value = MOMO

    2013-12-26 14:48:05.806 Helloworld20131021_Object[1421:c07] i = 2 value = yy

    2013-12-26 14:48:05.807 Helloworld20131021_Object[1421:c07] i = 3 value = <MyClass: 0x9510e20>

    2013-12-26 14:48:05.807 Helloworld20131021_Object[1421:c07] first for array:xx

    2013-12-26 14:48:05.808 Helloworld20131021_Object[1421:c07] first for array:MOMO

    2013-12-26 14:48:05.808 Helloworld20131021_Object[1421:c07] first for array:yy

    2013-12-26 14:48:05.808 Helloworld20131021_Object[1421:c07] first for array:<MyClass: 0x9510e20>

    使用 componentsSeparatedByString : 来切分 NSArray
    使用 componentsJoinedByString : 来合并 NSArray 中的元素并创建字符串

    数组的拼接

     1   
     2     NSString *string=@"up,down,left,right";
     3     NSArray *array2=[string componentsSeparatedByString:@","];
     4     
     5     for (NSObject * object in array2)
     6     {
     7         NSLog(@"输出对象数组:%@", object);
     8     }
     9     
    10     string=[array2 componentsJoinedByString:@":"];
    11     
    12     NSLog(@"the new string is %@",string);

    输出:

    2013-12-26 15:20:19.914 Helloworld20131021_Object[1704:c07] 输出对象数组:up

    2013-12-26 15:20:19.915 Helloworld20131021_Object[1704:c07] 输出对象数组:down

    2013-12-26 15:20:19.915 Helloworld20131021_Object[1704:c07] 输出对象数组:left

    2013-12-26 15:20:19.916 Helloworld20131021_Object[1704:c07] 输出对象数组:right

    2013-12-26 15:20:19.916 Helloworld20131021_Object[1704:c07] the new string is up:down:left:right

    2.可变数组对象
    [NSMutableArray arrayWithCapacity:10] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度10以后NSMutableArray的长度会自动扩充,所以不用担心数组越界。
    [array addObject:...] : 向可变数组尾部添加数据对象。
    [array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。

    [array insertObject:@"插入一只小老虎" atIndex:1] :向可变数组中插入一个字符串对象,并且设定它的位置脚标索引为 1。感觉像链表一样,后面的位置递增。

    [array insertObject:(NSArray *) atIndex:(NSIndexSet *)] :向可变数组中插入一个数组对象,可以任意设置它的位置脚标索引。
    NSRange range = NSMakeRange(0,5); 设置一个范围为 0 到 5 之间。
    [array removeObject:myClass inRange:range] : 设置在一个范围内删除数据,如果这个范围内没有删除的这个对象则不会删除任何东西。例子中因为myClass对象在 数组 0 到 5的范围内,所以myClass就被删除掉了。
     
    [array removeObject:(id)] :无需考虑范围,主要数组中存在这个对象就会直接被删除。
    [array removeObjectAtIndex:(NSUInteger)]:删除数组中指定脚标索引的数据。
     
    [array removeObjectIdenticalTo:(id)] : 删除数组中指定元素
    [array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范围内删除指定的元素。
     
    [array removeObjectsInArray:(NSArray *)] :删除一个数组的元素。
    [array replaceObjectAtIndex 2 withObject:@"已经修改了"]:替换数组脚标为2的数据。
     
     1  
     2     //创建一个可变的数组长度为10
     3     NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:10];
     4     
     5     //向数组中动态的添加对象
     6     [array1 addObject:@"雨松"];
     7     [array1 addObject:@"MOMO"];
     8     [array1 addObject:@"小可爱"];
     9     [array1 addObject:@"哇咔咔"];
    10     
    11     [array1 addObject:myClass];
    12     //向数组中插入
    13     [array1 insertObject:@"插入一只小老虎" atIndex:1];
    14     
    15     //设置一个删除范围
    16     NSRange range=NSMakeRange(0,6);
    17     /*
    18      NSRange range = NSMakeRange(0,5); 设置一个范围为 0 到 5 之间。
    19      [array removeObject:myClass inRange:range] : 设置在一个范围内删除数据,如果这个范围内没有删除的这个对象则不会删除任何东西。例子中因为myClass对象在 数组 0 到 5的范围内,所以myClass就被删除掉了。
    20      
    21      [array removeObject:(id)] :无需考虑范围,主要数组中存在这个对象就会直接被删除。
    22      [array removeObjectAtIndex:(NSUInteger)]:删除数组中指定脚标索引的数据。
    23      
    24      [array removeObjectIdenticalTo:(id)] : 删除数组中指定元素
    25      [array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范围内删除指定的元素。
    26      
    27      [array removeObjectsInArray:(NSArray *)] :删除一个数组的元素。
    28      
    29      */
    30     //删除元素
    31     [array1 removeObject:myClass inRange:range];
    32     
    33     //修改脚标索引为2的元素
    34     
    35     [array1 replaceObjectAtIndex: 2 withObject:@"已经修改了"];
    36 
    37     
    38     for (NSObject * object in array1)
    39     {
    40         NSLog(@"输出对象数组:%@", object);
    41     }

    输出:

    2013-12-26 14:48:05.845 Helloworld20131021_Object[1421:c07] 输出对象数组:雨松

    2013-12-26 14:48:05.846 Helloworld20131021_Object[1421:c07] 输出对象数组:插入一只小老虎

    2013-12-26 14:48:05.846 Helloworld20131021_Object[1421:c07] 输出对象数组:已经修改了

    2013-12-26 14:48:05.847 Helloworld20131021_Object[1421:c07] 输出对象数组:小可爱

    2013-12-26 14:48:05.848 Helloworld20131021_Object[1421:c07] 输出对象数组:哇咔咔

    感觉比java的 arraylist linkedlist 部分方法比较像。

    http://www.xuanyusong.com/archives/412

  • 相关阅读:
    keepalived
    设置Suse linux 用户远程登录超时时间
    启用Linux云平台oracle数据库实口令复杂性函数:PASSWORD_VERIFY_FUNCTION=NULL
    将tomcat7解压版注册为windows系统服务
    linux 在后台运行数据库导入导出命令
    suse enterprise Linux 11上配置 oracle11g和tomcat开机自启动
    Linux下的Tomcat JVM 调优
    oracle 11g 常用命令
    如何运行jnlp文件
    查询oracle 数据库 SQL语句执行情况
  • 原文地址:https://www.cnblogs.com/aosting/p/3489520.html
Copyright © 2020-2023  润新知