Objective-C学习-数组 NSArray 和 NSMutableArray

来源:互联网 发布:飞车大黄蜂数据 编辑:程序博客网 时间:2024/06/10 06:45
在学习 Objective-C的过程中,感觉数组在这一个学习方面是一个比较大的应用域,所以写这篇随笔来总结一下。

  首先声明的是,与C语言的数组不同,Objective-C的是数组只能用来存储对象,而不是存储int 、double、char等基础数据类型,一般要存这些基础数据类型,对于我这个刚学 Objective-C的新手来说,我的做法是将有关数字的基础类型 如 int 、double、char首先转换成一个叫做 NSNumber的类  char*类型的转换成  Objective-C的字符串  NSString 类来进行储存,相关 NSNumber 和 NSString 在以后我学习到的时候会来总结一下我的学习成果。

 

 

       Objective-C的数组分为两种,一种叫做不可变数组(NSArray),一种叫做可变数组(NSMutableArray),NSMutableArray类是NSArray类的一个子类。

  (1)不可变数组(NSArray) ---------该类型在确定之后,不能进行数组元素的更改以及交换

   

///  main.m//  NSArray(不可变数组) 博客////  Created by YueWen on 15/9/8.//  Copyright (c) 2015年 YueWen. All rights reserved.//#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {        /*     *不可变数组 NSArray     */        /*数组的常用的基本初始化*/        //objc方式的创建对象的普遍方法,init是NSObject的方法,几乎所有的类都是继承于NSObject 类    NSArray * array1 = [[NSArray alloc] init];    //这种创建对象的方法与上面实质是相同的,只不过上面的是便利初始化函数,下面的是便利构造器来创建,下面就不再注释是便利初始化函数还是便利构造器    NSArray * array2 = [NSArray array];        //一种和java 一样的创建对象的方法,刚从java 转过来的程序员会比较青睐与这种初始化    NSArray * array3 = [NSArray new];        //根据数组 array1 来创建数组对象 array4 和 array5    NSArray * array4 =[[NSArray alloc]initWithArray:array1];    NSArray * array5 = [NSArray arrayWithArray:array1];        //通过方法来初始化数组里面的数据,注意后面不要丢了nil    NSArray * array6 = [[NSArray alloc]initWithObjects:@"Run",@"Into",@"Love",nil];    NSArray * array7 = [NSArray arrayWithObjects:@"Run",@"Into",@"Love",nil];        //最简洁的直接赋值创建数组    NSArray * array8 = @[@"Run",@"Into",@"Love"];                /*不可变数组的 常用方法*/            /**     *  在array8的所有的元素后面,追加一个元素@“Yue”,返回给array9     *  此时 array9 的元素的个数为4  元素分别为 @“Run” @"Into" @"Love" @"Yue"     *  注:必须要有一个数组来接收返回值 ,不可变数组是不能改变自身的,执行完方法之后,array8是没有任何变化的     */    NSArray * array9 = [array8 arrayByAddingObject:@"Yue"];        /**     *  在array8的所有的元素后面,追加 数组 的所有的元素 返回给array10     *  此时 array10 的元素的个数为10 元素分别为 @“Run” @"Into" @"Love" @"Run" @"Into" @"Love"     */    NSArray * array10 = [array8 arrayByAddingObjectsFromArray:array8];            /**     *  将 array8 的所有的元素 通过 @"_"连接起来,组成一个字符串对象     *  结果是: s = Run_Into_Love     */    NSString * s = [array8 componentsJoinedByString:@"_"];    /**     *  判断数组 array8 中是否有  值为@“Run”的 NSString 对象(不一定必须是字符串,因为数组中可以存各种对象)     *  结果是: contain = YES;     */    BOOL contain = [array8 containsObject:@"Run"];        /**     *  返回的是 值为@“Love” 的 NSString 对象 在数组 array8中的下标数     *  结果是: index1 = 2;     */    NSInteger index1 = [array8 indexOfObject:@"Love"];        /**     *  比较两个数组是否相同     *  结果是: isEqual = NO;     */    BOOL isEqual = [array8 isEqualToArray:array9];        /**     *  返回的是数组 array8 的第一个元素对象     *  结果是:firstObject = @"Run"     */    NSString * firstObject = [array8 firstObject];    /**     *  返回的是数组 array8 的最后一个元素对象     *  结果是:lastObject = @"Love"     */    NSString * lastObject = [array8 lastObject];        /**     *  获取数组 array8 中下标为1的元素对象     *  结果是:object = @"Into"     */    NSString * object = [array8 objectAtIndex:1];            return 0;}


 

  (2)可变数组(NSMutableArray)-------该类型在确定之后,可以进行元素的增、删、改(包括元素的位置 以及 数组的元素个数)  


////  main.m//  NSMutableArray (可变数组)博客////  Created by YueWen on 15/9/9.//  Copyright (c) 2015年 YueWen. All rights reserved.//#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {        /**     *  可变数组     */            /*可变数组的常用初始化方法*/            //objc方式的创建对象的普遍方法,init是NSObject的方法,几乎所有的类都是继承于NSObject 类    NSMutableArray * mArray1 = [[NSMutableArray alloc]init];        //使用 可变数组 的 便利构造器 来完成初始化    NSMutableArray * mArray2 = [NSMutableArray array];        //一种和java 一样的创建对象的方法,刚从java 转过来的程序员会比较青睐与这种初始化    NSMutableArray * mArray3 = [NSMutableArray new];        //根据数组 mArray1 来创建 数组对象 mArray4    NSMutableArray * mArray4 = [[NSMutableArray alloc]initWithArray:mArray1];    NSMutableArray * mArray5 = [NSMutableArray arrayWithArray:mArray1];        //初始化数组的时候 默认的元素个数是3个  但是对于可变数组无所谓,因为后面是可以加的    NSMutableArray * mArray6 = [[NSMutableArray alloc]initWithCapacity:3];    NSMutableArray * mArray7 = [NSMutableArray arrayWithCapacity:3];        //通过事先放入几个元素对象 来完成初始化,但是一定不要忘记后面的nil    NSMutableArray * mArray8 = [[NSMutableArray alloc]initWithObjects:@"Run",@"Into",@"Love",nil];    NSMutableArray * mArray9 = [NSMutableArray arrayWithObjects:@"Run",@"Into",@"Love", nil];            /**     *  可变数组 的常用数据处理方法     *  以下实例用 原型用mArray9     */            /**     *  为数组添加元素,实例是在数组最后添加元素@“Yue”     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Love"]     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Love",@"Yue"]     */    [mArray9 addObject:@"Yue"];        /**     *  为数组添加元素,与上例不同的是,是将mArray8的所有的元素都追加到mArray9中     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Love",@"Yue"]     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Love",@“Yue”,@“Run”,@“Into”,@"Love"]     */    [mArray9 addObjectsFromArray:mArray8];        /**     *  将数组的最后一个元素对象从数组中删除     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Love",@“Yue”,@“Run”,@“Into”,@"Love"]     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Love",@“Yue”,@“Run”,@“Into”]     */    [mArray9 removeLastObject];        /**     *  删除数组中存在的某个对象,如果这个对象存在多个相同的,都会被删除     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Love",@“Yue”,@“Run”,@“Into”]     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Love",@“Run”,@“Into”]     */    [mArray9 removeObject:@"Yue"];        /**     *  删除数值中的存在的某个对象。只不过相比上一个方法,该方法存在范围     *     *  @param 1 表示从下标为(包含)的元素对象开始查找     *  @param 3 表示查找的个数     *     *  方法执行后前:mArray9 = @[@"Run",@"Into",@"Love",@“Run”,@“Into”]     *  该方法表示 从 @“Into”开始,查找往后的3个,如果存在@“Run”,就删除,没有就不作为     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Love",@“Into”]     */    [mArray9 removeObject:@"Run" inRange:NSMakeRange(1, 3)];        /**     *  表示删除数组中下标为3 的元素对象  (使用这个方法小心数组越界)     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Love",@“Into”]     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Love"]     */    [mArray9 removeObjectAtIndex:3];        /**     *  表示从mArray9中删除所有的mArray8 存在的对象元素     *  因为mArray8 和 mArray9 中的元素相同,所以执行完毕后 数组mArray9中没有任何元素了     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Love"]     *  方法执行后:mArray9 = @[]     */    [mArray9 removeObjectsInArray:mArray8];        /**     *  表示从mArray8中删除范围的元素     *     *  @param 0 从下标为0的元素开始     *  @param 2 删除元素的个数     *     *  方法执行前:mArray8 = @[@"Run",@"Into",@"Love"]     *  方法执行后:mArray8 = @[@"Love"]     */    [mArray8 removeObjectsInRange:NSMakeRange(0, 2)];        /**     *  删除数组mArray8中的所有的对象元素     *  方法执行前:mArray8 = @[@"Love"]     *  方法执行后:mArray8 = @[]     */    [mArray8 removeAllObjects];        //因为数组的元素都已经没有,所以初始化一个,为后面的实例继续做例子    [mArray9 addObjectsFromArray:@[@"Run",@"Into",@"Love"]];            /**     *  表示在可变数组中插入对象元素     *  在下标为2的位置插入一个@”Yue“的字符串对象     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Love"]     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Yue",@"Love"]     */    [mArray9 insertObject:@"Yue" atIndex:2];        /**     *  表示在可变数组中替换对象元素     *  将下标为2的位置的元素 用字符串对象@“Wen”替换     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Yue",@"Love"]     *  方法执行后:mArray9 = @[@"Run",@"Into",@"Wen",@"Love"]     */    [mArray9 replaceObjectAtIndex:2 withObject:@"Wen"];        /**     *  表示将可变数组中的对象元素交换位置     *  将下标为2位置的元素 和 下标为3位置的元素 交换位置     *  方法执行前:mArray9 = @[@"Run",@"Into",@"Wen",@"Love"]     *  方法执行后:mArray9 = @[@“Run",@"Into",@"Love",@"Wen"]     */    [mArray9 exchangeObjectAtIndex:2 withObjectAtIndex:3];            return 0;}

              



 

  /*****

  ***数组的遍历 (我所了解的目前有三种方式)

     ****/

  1、枚举器法  (这种方法在遍历过程中不能改变数组的个数以及元素的位置,不然会出错)

      NSEnumerator * enumerator = [mutableArray objectEnumerator];//构造枚举器

      id obj;

      while (obj = [enumerator nextObject]) {

          //obj既为元素

      }

 

  2、快速枚举法  (有的叫做 快速for循环) (这种方法依旧在遍历过程中不能改变数组的个数以及元素的位置,不然会出错)

      for(id obj in mutableArray){

          //obj既为元素

      } //这种方法他们都说是最快的,我也就当作最快的来用

 

   对于枚举器,还有一种叫做逆序枚举器,方法如下  

    NSEnumerator *enumrator = [mutableArray reverseObjectEnumerator];//构造逆序枚举器,用法同枚举器一样,但不一样的是,用逆序枚举器遍历的时 候,以上两种方法可以改变数组的个数以及元素的位置。

 

  3、使用for循环进行遍历 (这种遍历方法可以在循环中改变数组的个数以及元素的位置)

      for (int i = 0; i < [mutableArray count]; i++) {

          id obj = [mutableArray objectAtIndex:i];// obj既为元素

      }

 

0 0
原创粉丝点击