黑马程序员--Foundation框架之--NSArray类以及它的子类NSMutableArray类

今天我们继续来看一下Foundation框架中的NSArray类和 NSMutableArray类,NSArray类 是不可变的,NSMutableArray类是可变的。

一、NSArray类

NSArray中不可以存放基本数据类型,只能存放类的实例,如果需要将基本类型、结构体放入到数组中得话,需要通过NSNumber/NSValue进行数据的封装

同时不能在NSArray中存储nil

    //
    //  main.m
    //  16_NSArray
    //
    //  Created by waterfoxjie on 15-04-01.
    //  Copyright (c) 2015年 waterfoxjie. All rights reserved.
    //  

    #import <Foundation/Foundation.h>  

    int main(int argc, const charchar * argv[]) {
        @autoreleasepool {
            // 数组的创建  方式一:
            NSString *s1 = @"zjsj";
            NSString *s2 = @"xiaohong";
            NSString *s3 = @"jiajia";
            // 方式二:最后的nil相当于结束的标记
            NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil nil];
            NSLog(@"%@",array1);  

            // 方式三:使用类方法创建
            array1 = [NSArray arrayWithObjects:s1,s2,s3, nil nil];  

            // 方式四:创建一个数组,将源数组中的数据拿出来放进去
            NSArray *array2 = [NSArray arrayWithArray:array1];
             // 访问数组中的数据,数组中存放的是对象的指针
            NSString *str1 = [array1 objectAtIndex:0];
             // 获取数组元素中的个数
            NSUInteger count = [array1 count];// 判断数组中是否包含某一个对象,判断的是指针对象值,不是对象中的值
            BOOL isContains = [array1 containsObject:@"zhangsan"];
              // 返回一个对象在数组中的下标值
            NSUInteger index = [array1 indexOfObject:@"zhangsan"];
            if(index == NSNotFound){
                // 没有找到
            }else{
                // 找到了
            }
              // 数组中存放的如果是字符串的话,可以使用连接符将其所有的元素进行连接
            NSString *content = [array1 componentsJoinedByString:@","];
              // 访问数组最后一个元素
            NSString *lastObj = [array1 lastObject];
              // 在原来的数组后面追加元素,返回一个新的数组对象,因为他是不可变的
            NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"];  

            // 数组的遍历 方式一:
            for(int i=0;i<array1.count;i++){
                NSString *str = [array1 objectAtIndex:i];
                NSLog(@"%@",str);
            }  

            // 方式二:快速遍历
            for(NSString *s in array1){
                NSLog(@"%@",s);
            }
        }
        return 0;
    }  

下面来看仔细一下这些操作方法:

1、NSArray的创建

// 数组的创建  方式一:  NSString *s1 = @"zjsj";NSString *s2 = @"xiaohong";  NSString *s3 = @"jiajia";

// 方式二:最后的nil相当于结束的标记  NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3, nil nil];  

我们看到他的initWithObjects方法的最后一个值为nil,这个我们在之前说到过这个值,他是空指针的意思,这里的NSArray的最后一个元素为nil,是用于标记NSArray结束。

当然还有其他的方式可以创建数组:

// 方式三:使用类方法创建  array1 = [NSArray arrayWithObjects:s1,s2,s3, nil nil];
              // 方式四:创建一个数组,将源数组中的数据拿出来放进去
NSArray *array2 = [NSArray arrayWithArray:array1];

2、使用下标访问元素

// 访问数组中的数据,数组中存放的是对象的指针
NSString *str1 = [array1 objectAtIndex:0];  

3、获取数组的大小

 // 获取数组元素中的个数
NSUInteger count = [array1 count]; 

NSUInteger是无符号的int类型

4、是否包含某一个元素

// 判断数组中是否包含某一个对象,判断的是指针对象值,不是对象中的值
BOOL isContains = [array1 containsObject:@"zhangsan"];

5、找到一个元素在数组中的下标

// 返回一个对象在数组中的下标值
NSUInteger index = [array1 indexOfObject:@"zhangsan"];
if(index == NSNotFound){
      // 没有找到
      }else{
      // 找到了
}  

6、使用指定的连接符连接数组中所有的元素

// 数组中存放的如果是字符串的话,可以使用连接符将其所有的元素进行连接
NSString *content = [array1 componentsJoinedByString:@","]; 

7、在数组的尾部增加一个元素

// 在原来的数组后面追加元素,返回一个新的数组对象,因为他是不可变的
NSArray *array3 = [array1 arrayByAddingObject:@"zhaoliu"]; 

8、数组的遍历

    // 数组的遍历  方式一:
    for(int i=0;i<array1.count;i++){
        NSString *str = [array1 objectAtIndex:i];
        NSLog(@"%@",str);
    }  

    // 方式二:快速遍历
    for(NSString *s in array1){
        NSLog(@"%@",s);
    }  

二、NSMutableArray类

NSArray类是不可变的,NSMutableArray类是可变的,可变类一样的特性,就是可以进行增删改查操作,NSMutableArray继承NSArray类,有NSArray中的所有方法

    //
    //  main.m
    //  17_NSMutableArray
    //
    //  Created by waterfoxjie on 15-04-01.
    //  Copyright (c) 2015年 waterfoxjie. All rights reserved.
    //  

    #import <Foundation/Foundation.h>  

    int main(int argc, const charchar * argv[]) {
        @autoreleasepool {
            // 创建可变数组
            NSString *str1 = @"zhangsan";
            NSString *str2 = @"lisi";
            NSString *str3 = @"wangwu";
            NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil nil];  // 先开辟5个空间,用于存储元素,当存储的元素超过了5个,数组会自动增大空间
            NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];  

            // 使用类方法创建
            NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5];
             //添加元素的方法
            [mArray1 addObject:str1];
            [mArray1 addObject:str2];
                        //添加数组,把mArray1中的所有元素全部添加到mArray2中
            [mArray2 addObjectsFromArray:mArray1];
            NSLog(@"mArray3 = %@",mArray2);   //在指定的位置上插入特定元素
            [mArray2 insertObject:@"def" atIndex:0];
              //替换元素
            [mArray2 replaceObjectAtIndex:0 withObject:@"aaa"];
              //互换两个元素的位置
            [mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];
              //删除指定位置的元素
            [mArray2 removeObjectAtIndex:0];
                        //删除最后一个元素
            [mArray2 removeLastObject];
                        //删除指定的对象
            [mArray2 removeObject:@"lisi"];
                        //删除所有的对象/清空列表
            [mArray2 removeAllObjects];
        }
        return 0;
    }  

1、创建方法

    // 创建可变数组
    NSString *str1 = @"zhangsan";
    NSString *str2 = @"lisi";
    NSString *str3 = @"wangwu";
    NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:str1,str2,str3, nil nil];
    //先开辟5个空间,用于存储元素,当存储的元素超过了5个,数组会自动增大空间
    NSMutableArray *mArray2 = [[NSMutableArray alloc] initWithCapacity:5];
        //使用类方法创建
    NSMutableArray *mArray3 = [NSMutableArray arrayWithCapacity:5];  

创建方式和NSArray类似,但是有一种方式不能用,就是直接创建的方式,那个只能用于创建不变数组。

但是可变数组还有一个方法就是能够事先的设置数组的大小,而且超过这个大小之后,数组会自动扩充,类似于C语言中的动态数组的实现。

2、添加元素

// 添加元素的方法
[mArray1 addObject:str1];
[mArray1 addObject:str2];
// 添加数组,把mArray1中的所有元素全部添加到mArray2中
[mArray2 addObjectsFromArray:mArray1];
NSLog(@"mArray3 = %@",mArray2);

3、在数组的指定位置上插入元素

// 在指定的位置上插入特定元素
[mArray2 insertObject:@"def" atIndex:0];

4、替换元素

//替换元素
[mArray2 replaceObjectAtIndex:0 withObject:@"aaa"];

5、互换两个元素的位置

//互换两个元素的位置
[mArray2 exchangeObjectAtIndex:0 withObjectAtIndex:3];  

6、删除方法

//删除指定位置的元素
[mArray2 removeObjectAtIndex:0];  

//删除最后一个元素
[mArray2 removeLastObject];  

//删除指定的对象
[mArray2 removeObject:@"lisi"];  

//删除所有的对象/清空列表
[mArray2 removeAllObjects]; 
时间: 2024-10-07 18:33:02

黑马程序员--Foundation框架之--NSArray类以及它的子类NSMutableArray类的相关文章

黑马程序员-Foundation框架之数组和字典

一.Foundation框架简介 Foundation框架,顾名思义就是基础框架.基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础.OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类.要使用这个框架需要在引入头文件#import <Foundation/Foundation.h> 二.数组 NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组.下面通过代码来看一下它的一些基本的用法. 1 #import <Found

黑马程序员--Foundation框架之--NSDirctionary类以及它的子类NSMutableDirctionary类

------IOS培训期待与您交流! ------- 今天来看一下Foundation框架中的NSDirctionary 类,NSMutableDirctionary类,OC中叫字典,字典是无序的,这个和NSArray不一样. 一.NSDirctionary类 1.创建方法 // 字典的创建 NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil]; NSArray *

黑马程序员--Foundation框架之--NSObject类

OC中的Foundation框架是系统提供的,他就相当于是系统的一套api,其内部有很多现有的类和功能提供给我们使用. 那么今天首先来介绍一下Foundation框架中的第一个类NSObject. // // Person.h // 13_NSObjectMethod // // Created by waterfoxjie 15-03-31. // Copyright (c) 2015年 waterfoxjie. All rights reserved. // #import <Foundat

黑马程序员--Foundation框架之--NSString类以及它的子类NSMutableString类

继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutableString是可变的,和Java中的StringBuilder一样. 一.NSString对象 在OC中,NSString对象是非常重要的一个对象,也是最基础的一个对象,是用来处理字符串的常用类. 下面来看一下NSString的一些方法的使用: 1.创建的方法 // 字符串的创建方式 NSString *s

黑马程序员——Foundation框架的小总结

一.Foundation框架—结构体 一.基本知识 Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文件就可以了.即#import<foundation/foundation.h> 补充:core foundation框架相对底层,里面的代码几乎都是c语言的,而foundation中是OC的. 二.常用的结构体介绍及简单使用 常用的结构体: (一)NSRang的基本使用

黑马程序员--Foundation框架之--类其他常用的类:NSNumber,NSDate

------IOS培训期待与您交流! ------- Foundation的其他常用的类:NSNumber,NSDate 一.NSNumber 这个类主要是用来封装基本类型的,OC 中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去. 从这一点上我们就可以看出NSNumber是很重要的,后面一定会经常用到. 1.封包和解包 // 创建NSNumber // 封包 NSNumber *intNumber = [NSNumber numberWithI

黑马程序员——Foundation框架常用类(NSNumber/NSValue)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 简介 引入:NSArray.NSSet.NSDictionary这些OC集合都只能存放OC对象,不能存放基本数据类型(int.char.double...).如果我们想将基本数据类型存到这些OC集合中,那么我们将基本数据类型(int.char.double...)包装成OC对象,那么就可以存到OC集合中.NSNumber可以将基本数据类型包装为OC对象. NSValue:用来存储一个C或者OC的

黑马程序员——Foundation框架常用类(NSDate)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 简介 NSDate:用于保存时间值的一个OC类,同时提供了一些方法来处理一些与时间相关的事.NSDate对象用来表示一个具体的时间点.NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体.NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示. NSDate 1.时间对象的基本使用 //第一种创建方式(里面存储

黑马程序员------Foundation框架中各种牛瓣数据类型

-----iOS培训.Android培训.Java培训,期待与您交流----- 一.NSRange.NSPoint\CGPoint. NSSize\CGSize.NSRect\CGRect (CGPint CGSize)结构体 1)NSRange NSRange表示一个范围,比如我们想求个@"I fall in love with Objective-C~";  这个字符串中"love"的表示范围就是位置从11开始,长度为4: NSRange的本质是一个结构体, 里