• OC第三节——NSArray和NSMutableArray


    1、OC数组和c数组的区别
            C语言的数组:
                相同类型变量的有序结合。 类型:可以是简答数据类型、构造数据类型    
                int     a[10];
                int   *p[10];


          1)NSArray是一个对象,是任意类型对象地址的集合
            不能存放简单的数据类型(int, float, NSInteger…)
            除非通过一些手段把简单数据类型变成对象。
          2)C数组可以保存任意类型的数据
          3)NSArray下标越界不会有警告,但是运行会直接报错


        2、如何创建一个数组
        2.1、
            //通过类的方法创建
                arrayWithObjects :消息
                作用:通过指定对象创建一个数组
                [NSArray arrayWithObjects:id, id, nil];

                arrayWithArray: 消息
                作用:通过已存在的数组创建一个数组
                [NSArray arrayWithArray:array];

            //通过对象的方法创建
                initWithObjects: 消息
                作用:通过指定对象创建一个数组
                [[NSArray alloc] initWithObjects:(id), …(id), nil]
            
                initWithArray: 消息
                作用:通过已存在的数组创建一个数组
                [[NSArray alloc] initWithArray:<#(NSArray *)#>]
                            

          2.2、Objective-c 2.0 新特征

            NSArray *array4 = @[@"one one", @"two two"];




           2.3 、arrayWithObjects:count
            将一个c类型的对象数组转换为oc的数组对象


            [NSNull null] 空对象
            
        2.4、创建一个空对象
            NSNull *nilObject = [NSNull null];
            NSArray *arr4 = [NSArray arrayWithObjects:@"a a", nilObject, nil];
            NSLog(@"arr4 = %@", arr4);




        3.数组的元素是什么
          1)数组元素可以是任意对象,装的是对象的地址    
                NSInteger   CGFloat  BOOL  xxx


        4.什么是id类型的变量
          1)通用对象类型        void *     NSObject *
          2)可以指向任何对象

    NSArray常用方法
        1、获取数组元素个数
          count消息
            - (NSUInteger)count;
        2、通过索引获取相应的元素
            - (id)ObjectAtIndex:(NSUInteger)index;
            作用:通过下标获取数组中指定位置的元素
            - (id)lastObject;
               作用:取出最后一个元素
        3、通过对象地址获取在数组中的索引
            - (NSUInteger)indexOfObject:(id)anObject;
        4、判断数组中数组包含元素anObject
            - (BOOL)containsObject:(id)anObject;
            

        5、如何取出数组中的一部分元素
          1)subarrayWithRange消息
            作用:取出数组中指定范围内的元素
          2)objectsAtIndexes消息
            作用:从数组中获取指定下标的元素
            NSIndexSet对象,一个下标集合
            NSMutableIndexSet对象,是NSIndexSet的子类,可以添加不同的下标

            NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
            [indexes addIndex:0];
            [indexes addIndex:2];
            [indexes addIndex:3];
            //将清单交给数组对象
            NSArray *subarr2 = [arr2 objectsAtIndexes:indexes];

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            NSArray *array = [[NSArray alloc] initWithObjects:@"zhangsan", @"lisi", @"wangwu", nil];
            
            
            //1. 求数组的元素的个数
            NSUInteger count = [array count];
            NSLog(@"count = %lu", count); //3
            
            
            //2. 根据索引获得数组的元素
            
            //2.1 使用下标的方式获得元素
            NSLog(@"array[0] = %@", array[0]);
            //2.2 通过方法获得元素
            id obj = [array objectAtIndex:1];
            NSLog(@"obj = %@", obj);
            
            //2.3 获得第一个元素
            NSString *firstObj = [array firstObject];
            NSLog(@"firstObj = %@", firstObj);
            
            //2.4 获得最后一个元素
            NSString *lastObj = [array lastObject];
            NSLog(@"lastObj = %@", lastObj);
            
            
            //3. 通过对象获得对象的下标
            NSUInteger index = [array indexOfObject:@"lisi"];
            NSLog(@"index = %lu", index);
            
            //4. 判断数组中数组包含元素anObject
            BOOL ret = [array containsObject:@"yangliu"];
            NSLog(@"ret = %d", ret);
            
            
        }
        return 0;
    }
    



    NSArray数组的遍历
        回忆:如何在c语言中遍历一个数组的所有元素
        NSlog(@"%@", arr);  //打印数组就是打印数组的每个元素

        1、通过下标遍历数组
            int i;
            for (i = 0; i < length; i ++)

        2、NSEnumerator  枚举器
          1)objectEnumerator消息
            作用:正序输出所有元素
          2)reverseObjectEnumerator消息
            作用:逆序输出所有元素

    【枚举器法】
        NSEnumerator *enumerator = [array objectEnumerator];
        id obj = nil;
        while (obj = [enumerator nextObject])
        {
            NSlog(@"obj = %@", obj);
        }
    【注】
             1)id obj: 因为不知道数组里面的具体的对象,所有使用泛型指针。
                     如果知道都是 某一个相同的类型, 可以使用具体的指针
                     这里可以使用 NSString *
             
             2) objectEnumerator:          正序遍历数组
                  reverseObjectEnumerator:   逆序遍历数组
             
             3)每次得到一个数组的一个元素, 将其赋值给 obj, 直到obj 得到的指针为 nil,
                 才会退出循环.

    NSMutableArray            

        1、增加数组元素
            追加元素
            addObject 消息
        (void)addObject:(id)anObject;

              指定索引插入元素 [0 ~ count]
          1)如何插入一个元素
            insertObject:atIndex消息
            - (void)insertObject:(id)anObject atIndex:(NSUInteger)index;

          2)    插入多个元素
            insertObjects:atIndexes
       
        2、如何删除元素
          1)删除指定索引的元素
            - (void)removeObjectAtIndex:(NSUInteger)index;
             2) 删除最后一个元素
            - (void)removeLastObject;
             3)根据指定对象来删除元素
            - (void)removeObject:(id)anObject;
             4)删除所有元素
            - (void)removeAllObject;
        
            5)一次性删除所有指定下标的元素
            removeObjectsAtIndexes 消息
            NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
            [arr1 removeObjectsAtIndexes:indexes];

           6) 删除指定范围内指定的对象
            - (void)removeObject:(id)anObject inRange:(NSRange)range;

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            
            NSMutableArray *mutArray = [NSMutableArray array];
            
            //增, 删、 改
            //____________________增_________________________
            //__________添加__________
            //1) 添加一个元素
            [mutArray addObject:@"a1"];
            [mutArray addObject:@"a2"];
            
            //2) 将一个数组的内容,全部添加到新的数组里面
            [mutArray addObjectsFromArray:@[@"a3", @"a4"]];
            NSLog(@"1--mutArray = %@", mutArray);
            
            
            //_________插入_________
            //1)在指定的下标位置 插入 一个对象
            [mutArray insertObject:@"XXX" atIndex:1];
            NSLog(@"2--mutArray = %@", mutArray);
            
            
            //2)通过下标集合 插入一个数组的 所有的元素
            NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet];
            
            //添加 整数
            [indexes addIndex:0];
            [indexes addIndex:2];
            [indexes addIndex:6];
            
            
            //下标的个数 和 插入数组的元素的个数 必须  一样多, 都则程序崩溃
            NSArray *insetArr = @[@"zhangsan", @"lisi", @"wangwu"];
            [mutArray insertObjects:insetArr atIndexes:indexes];
            NSLog(@"3--mutArray = %@", mutArray);
            
            
            
            //_________________________删________________________
            
            //1) 通过下标删除元素
            [mutArray removeObjectAtIndex:0];
            NSLog(@"4--mutArray = %@", mutArray);
            
            //2) 删除最后一个元素
            [mutArray removeLastObject];
            NSLog(@"5--mutArray = %@", mutArray);
            
            [mutArray removeObjectsInRange:NSMakeRange(0, 2)];
            NSLog(@"6--mutArray = %@", mutArray);
            
            //根据数组删, 只会删参考数组里面和被删除数组里面都有的元素
            [mutArray removeObjectsInArray:@[@"a2", @"a3", @"xiaozhang"]];
            NSLog(@"7--mutArray = %@", mutArray);
            
            //删除数组中的对象,  【注】删除所有的相同的对象
            [mutArray addObject:@"XXX"];
            [mutArray addObject:@"XXX"];
            [mutArray removeObject:@"XXX"];
            NSLog(@"8--mutArray = %@", mutArray);
            
            
            //删除数组里面所有的对象
            [mutArray removeAllObjects];
            NSLog(@"9--mutArray = %@", mutArray);
            
            
        }
        return 0;
    }
    
  • 相关阅读:
    日志工具——slf4j
    统一建模语言——UML
    Java基础——网络编程
    Java基础——语法基础
    Java基础——NIO(二)非阻塞式网络通信与NIO2新增类库
    Java基础——NIO(一)通道与缓冲区
    动态加载script文件的两种方法
    asp.net 通用的连接数据库实例代码
    Nginx用户认证配置方法详解(域名/目录)
    js冒泡法和数组转换成字符串示例代码
  • 原文地址:https://www.cnblogs.com/laolitou-ping/p/6181515.html
Copyright © 2020-2023  润新知