`
qianjiangbing
  • 浏览: 92095 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

NSArray和NSMutableArray

阅读更多

一、NSArray

1.NSArray是Foundation框架中的1个类,是OC中的数组,NSArray对象是1个数组对象,存储多个数据的。

首先我们来回顾一下C语言的数组有哪些特点:

a.元素类型相同

b.长度固定

c.每个元素是连续的。

好,那么OC的数组有哪些特点?

a.NSArray数组中只能存储OC对象,非OC对象无法存储。

b.长度固定,一旦创建,数组中的元素无法新增和删除,甚至元素的值都无法更改。

c.NSArray数组中的每一个元素扔然是连续的,仍有下标/索引。

d.NSArray数组的元素的类型是id类型的。

 

2.NSArray数组的创建。

首先它是一个类,要创建对象才可以使用。

NSArray * arr1 = [NSArray new];
NSArray * arr2 = [[NSArray alloc] init];
NSArray * arr3 = [NSArray array];

 这么创建出来的数组的元素的个数是0个,没有意义的,因为NSArray数组是无法新增数组元素的。

 

NSArray *arr = [NSArray arrayWithObject:@"jack"];

创建了1个长度为1的数组,数组的元素的值为@"jack",这样写也没有意义的,原因你懂的,因为数组不可新增元素了。

 

3.买了这么多官司,就是为了等待下面激动人心的时刻,数组常用的几种方式:

3.1用类方法创建数组

 

+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ...
        
NSArray *arr1 = [NSArray arrayWithObjects:@"jack",@"rose",@"lily",@"lelei",nil];

 创建1个NSArray数组.并指定数组的元素的值.将每1个元素的值挨个挨个的写好.当所有的元素写完毕之后,记住后面跟1个nil,这个时候nil代表结束. 代表元素在这个地方结束.

 

强调:a.当我们将所有的元素写完以后,最后一定要跟1个nil,表示结束。

b.如果把你nil放在前面,就会认为元素到此结束。

c.NSArray只能存储OC对象,其他的别想了。

4.最常用的创建NSArray数组的方式。

创建NSArray对象的简写方式。

NSArray * arr = @[@"jack",@"rose",@“lucy”];

记住这种写法后面就不需要加nil了。

因为NSArray数组是无法存储非OC对象的,nil的本质就是0是基本数据类型。

5.NSArray数组的使用

a.使用%@就可以直接输出NSArray数组中的元素的值,需要注意的是,如果存储的是中文字符,输出的就是这个中文字符的Unicode编码。用%@打印整改NSArray数组对象的时候,如果元素是字符的中文,就会有乱码。

b.NSArray数组不能存储nil.

1.使用中括号写下标来取出指定的元素的值。

 

NSArray *arr = @[@"jack",@"rose",@"lily",@"jim",@"lilei",@"中文"];
     
         NSLog(@"arr[1] = %@",arr[5]);
 
         需要注意的时候,如果使用下标取出来的元素是1个中文字符串,是可以正常输出的.

 调用数组对象方法也是可以取出指定下标的元素的值。

 

 

- (ObjectType)objectAtIndex:(NSUInteger)index;
 
        ObjectTyoe ---- id

6. NSArray数组对象的其他的常用方法

 

 

 1). 得到数组的长度. 得到数组的元素的个数.
 
        @property (readonly) NSUInteger count;
 
    2). 获取数组中指定下标元素的值.
 
        - (ObjectType)objectAtIndex:(NSUInteger)index;
        如果下标越界,运行必报错.
 
    3). 判断数组中是否包含指定的元素.
 
        - (BOOL)containsObject:(ObjectType)anObject;
 
    4). 取到数组中的首个元素.
 
        @property (nullable, nonatomic, readonly) ObjectType firstObject
 
        如果使用下标0去取,如果数组的长度为0 那么就会报错.
        如果使用firstObject取,就返回nil 不会报错.
 
    5). 取到数组中的末尾元素.
 
        @property (nullable, nonatomic, readonly) ObjectType lastObject;
 
 
    6). 查找指定的元素在数组中第1次出现的下标.
 
        - (NSUInteger)indexOfObject:(ObjectType)anObject;
 
        如果没有找到,就返回NSNotFound.就是NSUInteger的最大值.

 7.变量NSArray数组

 

1)使用for循环,将每一个元素的下标变量出来,通过下标取值

 

NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"];
         
         for(int i = 0; i < arr.count;i++)
         {
            NSLog(@"%@",arr[i]);
            NSLog(@"%@",[arr objectAtIndex:i]);
         }

 2)使用循环增强来遍历。

 

a.语法格式

for(元素类型 变量名 in 数组名){

      变量名的值就是数组中每1个元素的值

}

执行原理:

将数组中第0个元素的值赋给迭代变量,然后执行循环体。

将数组中第1个元素的值赋给迭代变量,然后执行循环体

将数组中第2个元素的值赋给迭代变量,然后执行循环体

将数组中第3个元素的值赋给迭代变量,然后执行循环体

将数组中第4个元素的值赋给迭代变量,然后执行循环体

。。。。。

将数组中最后一个元素的值赋给迭代变量,然后执行循环体。

自动结束循环。

 

再次强调如何使用增强for循环来变量数组

-迭代变量的类型写数组中真正存储的数据的类型。

-迭代变量的名称可以自己随便写,因为这只是一个变量,当然最好可读性高。

-in是固定的其实跟java的增强for循环格式一样,只是java里使用了:而不是in

-要遍历那个数组就把那个数组写在in后面就OK了

-在循环体中,迭代变量的值就是数组元素中的每一个元素的值。

- 如果数组中存储的数据类型不一致,迭代变量建议使用id

 

3)使用block来遍历NSArray数组

- (void)enumerateObjectsUsingBlock:(void (^)(objectType obj, NSUIneger idx, BOOL *stop))block

这个方法的作用是遍历数组中的每一个元素。

 

NSArray *arr = @[@"jack",@"rose",@"lily"];

[arr enumerateObjectUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop){

       //obj:遍历出来的这个元素的值

      //idx:遍历出来的这个元素的下标

      NSLog(@"arr[%lu] = %@", idx,obj);

//如果想要停止遍历,就给这个stop指针指向的变量赋值为YES

     if(idx == 2)//如果下标为2的时候就停止遍历了。

{

    *stop = YES;

}

}];

8.NSArray与字符串相关的方法。

a使用指定的分隔符将数组中的每一个元素拼接成1个新的字符串。

 

- (NSString *)componentsJoinedByString:(NSString *)separator;

 

    NSArray *arr = @[@"jack",@"rose",@"lili",@"lilei",@"中文"];
    
    NSString *str =  [arr componentsJoinedByString:@""];

 以指定的字符串分割

 

 

- (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;

 

 

二、NSMutableArray

1.是Foundation框架的一个类,它是NSArray的子类

所以NSMutableArray和NSArray一样,也是一个数组。

并且NSArray具备的功能,NSMutableArray一样肯定都有

NSMutableArray是一个可变的数组,这个数组中的元素可以新增和删除

2.NSMutableArray的创建

 

NSMutableArray *arr1 = [NSMutableArray new];
     NSMutableArray *arr2 = [[NSMutableArray alloc] init];
     NSMutableArray *arr3 = [NSMutableArray array];

 这种方式创建出来的数组长度为0,但是这个是有意义的,因为这个数组的元素是可以动态的新增和删减的

 

 

+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ...
     这样创建也是可以的.但是一样 最后给1个nil

 特别注意这样是不行的

 

NSMutableArray *arr = @[@"jack", @"rose",@"lily"];

@[@"jack", @"rose",@"lily"];这是创建NSArray简写的方式,是1个NSArray对象

3.NSMutableArray数组新增元素

1)NSMutableArray数组刚创建的时候,这个数组的长度为0.

每新增1个元素,才动态为这个数组新增一个元素。

2)新增的方法

- (void)addObject:(ObjectType)anObject;

将数组中的每一个元素取出来新增到当前这个可变的数组中。

- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;

NSMutableArray *arr = [NSMutableArray array];

NSArray *arr1 = @[@"hehe",@"haha",@"hehe1"];
    
    [arr addObjectsFromArray:arr1];
    
    NSLog(@"%@",arr);

 4.删除元素

1)根据下标来删除元素

        - (void)removeObjectAtIndex:(NSUInteger)index;

 2)删除数组中的最后一个元素

 - (void)removeLastObject;

 

 3). 清空数组中的所有的元素.
 
        - (void)removeAllObjects;
 
 
    4). 删除数组中指定的元素.
 
        - (void)removeObject:(ObjectType)anObject;
        所有删除.
 
    5). 删除指定范围的元素
 
        - (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;
 
 
    6). 元素的插入:
        - (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;

     [arr removeObject:@"rose31111"];

    [arr removeObject:@"rose3"inRange:NSMakeRange(5, 2)];

 

     [arr removeObjectAtIndex:0];

    [arr removeLastObject];

    [arr removeAllObjects];

 

 

 

 

分享到:
评论

相关推荐

    Iphone数组一些基础操作 NSArray/NSMutableArray

    NSArray和NSMutableArray是两个常用的数组类,分别代表不可变数组和可变数组。下面将详细介绍这两个类的一些基础操作。 首先,创建NSArray的基本方法是通过`initWithObjects:`初始化,如: ```objc NSArray *array ...

    safely安全使用NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSMutableString。-Swift开发

    FFSafeKit安全地使用NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSMutableString。 功能安全访问NSArray安全访问NSDictionary安全访问并执行更改FFSafeKit安全地使用NSArray,NSMutableArray,...

    IOS 开发之 NSMutableArray与NSArray 的区别

    在本文中,我们将详细介绍 NSMutableArray 和 NSArray 的区别,并讨论它们的使用场景和优缺点。 一、 NSMutableArray 和 NSArray 的定义 NSMutableArray 和 NSArray 都是用于管理对象集合的类,它们都是 NSObject ...

    swift-Array安全工具

    "swift-Array安全工具"正是为了解决这个问题,通过利用Swift的runtime特性,提供了一种方法来增强NSArray和NSMutableArray的安全性,防止因错误操作导致程序崩溃。 首先,我们要理解Swift数组越界的原理。在Swift中...

    NSArray_NSMutableArray

    Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。

    iOS原生正则表达式以及NSArray快捷过滤

    NSPredicate应用,包括以下几个部分: 1、字符串,正则表达式的匹配; 2、字符串数组NSArray和NSMutableArray的快捷过滤方式; 3、自定义对象数组NSArray和NSMutableArray的快捷过滤方式;

    OC 基础总结

    本篇文档主要总结了OC中基础的集合类型,包括数组(NSArray和NSMutableArray)以及字典(NSDictionary)和集合(NSSet)。这些知识点对于初学者来说是非常实用的。 首先,我们来关注OC中的数组。数组分为两种类型:...

    深入剖析 iOS 性能优化 · ming1016:study Wiki1

    NSArray和NSMutableArray由于维护有序性和允许重复元素,某些操作如`containsObject:`、`indexOfObject:`等会遍历整个数组,时间复杂度为O(n)。而`objectAtIndex:`、`firstObject:`、`lastObject:`、`addObject:`和`...

    IOS应用源码之Array.rar

    总之,“IOS应用源码之Array.rar”可能是为了帮助开发者更好地理解和使用NSArray和NSMutableArray,通过实际的代码示例来展示这些概念在iOS应用开发中的应用。学习并理解这些知识点对于提升iOS开发技能至关重要。

    Object-c字符串数组字典

    在Objective-C中,字符串被封装在NSString类中,数组由NSArray和NSMutableArray类来管理,字典则由NSDictionary和NSMutableDictionary来实现,而集合则由NSSet和NSMutableSet来表示。此外,还提供了快速枚举等便捷的...

    Objective-C数组操作总结

    Objective-C提供了两个数组类:NSArray和NSMutableArray。NSArray用于创建不可变数组,而NSMutableArray则提供了修改数组内容的方法。以下是Objective-C中数组操作的详细知识点总结: 1. **创建数组**: - 使用`...

    (OC)归档解档(嵌套模型)(模型数组)

    为了提高代码的可维护性和可扩展性,可以创建一个类别(Category)来扩展NSArray和NSMutableArray,添加专门的归档和解档方法。这样,你可以在任何地方方便地调用这些方法,而无需在每个模型数组实例中重复实现归档...

    Object-C数组排序

    Objective-C提供了NSArray和NSMutableArray两种类型的数组。NSArray是不可变的,即一旦创建就不能修改;而NSMutableArray则是可变的,支持添加、删除和替换元素等操作,当然也包括排序。这里我们将主要讨论...

    object-c insert

    在Objective-C中,NSArray和NSMutableArray是两种常用的数组类型。NSArray是不可变的,一旦创建就不能修改;而NSMutableArray则是可变的,支持添加、删除和插入元素。对于NSMutableArray,可以使用`insertObject:at...

    object c中关于foundation类得ppt

    - **NSArray 和 NSMutableArray** - **定义**: - NSArray:不可变数组,一旦创建后不能更改。 - NSMutableArray:可变数组,可以在运行时添加、删除或替换元素。 - **用途**:用于存储一系列对象,并提供索引...

    Objective-C培训资料

    - 数组(NSArray和NSMutableArray)和字典(NSDictionary和NSMutableDictionary)的使用 - 基本数据类型和对象类型之间的转换 4. 第四章 - 控制流 - 条件语句(if-else, switch-case) - 循环语句(for, while,...

    Monopoly大富翁

    在Objective-C中,NSArray和NSMutableArray是常用的动态数组实现。动态数组允许在运行时添加、删除或更改其元素,这在处理游戏中的各种事件,如玩家移动、交易等时非常有用。例如,可以创建一个NSMutableArray来存储...

Global site tag (gtag.js) - Google Analytics