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;
}

 

转载于:https://www.cnblogs.com/laolitou-ping/p/6181515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值