Object C学习笔记11-数组

 

  在Object C也提供了类似C#中的Array数组对象,在Object C中使用NSArray 来创建数组;但是在Object C中NSArray 只能存放对象类型的指针,不能存放int,char,double等基本数据类型。

  一. 不可变数组对象

    这个和之前的NSString有些类似,NSArray 能够创建不可变的数组对象。一旦初始化这个对象就不能动态的修改和增加这个数组。

    (1)使用arrayWithObjects来初始化数组内容,参考如下代码:

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf"];

    上面初始化了一个items数组对象,但是值得注意的是,这段代码会报错,在Object C中数组对象的创建有个特殊的地方,就是最后一个元素必须是nil,这意味着使用nil来标识数组对象的结束。正确的方式如下:

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];

    (2)可以使用count方法来获取数组的长度

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];
NSLog(@"%d",[items count]);

    以上代码得到的值是2,还是3呢,一般人都会认为是3,但是这个数组的长度是2,上面已经提过了nil只是作为一个结束标识符,并不能代表素组内容。现在修改代码如下:

NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil,nil];
NSLog(@"%d",[items count]);

    得到的数组长度仍然为2,在第一个nil的位置就已经标识数组结束了,所以后面出现再多的数组元素都没有作用。

    (3)使用objectAtIndex来获取某个索引位置的数组元素

NSLog(@"%@",[items objectAtIndex:0]);

    以上代码可以获得素组对象items索引位置为0的元素,但是一定要注意数组的长度,否则数组越界异常。

    (4)使用for来遍历数组元素

for(int i=0;i<[items count];i++){
            NSLog(@"%@",[items objectAtIndex:i]);
}

    以上代码和我们平时使用遍历数组的方式无异,基本都是这种情况。但是for还有另外一种使用方式,和C#中的foreach使用方式一样。

for(NSObject *item in items){
            NSLog(@"%@",item);
}

  

  二. 动态数组

    (1)根据上面所描述的,大致可以猜得出来动态数组类,和NSMutableString比较类似。我们使用NSMutableArray来定义一个动态数组。而且NSMutableArray 还提供了一些方法动态像数组中添加元素,在NSMutableArray不用担心在添加元素的时候发生数组越界的问题,当NSMutableArray长度被占满之后会自动扩容。

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2];

    我们使用arrayWithCapacity来定义一个数组的容量。

    (2)可以使用addObject方法来向对象数组中添加元素,而且NSMutableArray和NSArray不一样,不需要使用nil来介绍标识数组结束。NSMutableArray中同样提供了count 方法来获取数组的长度,这里需要注意的是count和capacity 是不一样的,count是获取的实际长度,而capacity是可存放的长度。

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:12];
[mutItems addObject:@"abc"];
[mutItems addObject:@"def"];
NSLog(@"%d",[mutItems count]);

    如果往muItems中继续添加元素,直到超过12个,muItems也不会报错,而且count也会大于12,这也是NSMutableArray的优势所在。

    (3)使用insertObject 在特定的位置添加元素

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2];
        [mutItems addObject:@"abc"];
        [mutItems addObject:@"def"];
        [mutItems addObject:@"45454"];
        NSLog(@"%d",[mutItems count]);

        [mutItems insertObject:@"wang" atIndex:1];
        for (NSString *item in mutItems) {
            NSLog(@"%@",item);
        }

案例

    (4)删除数组中的元素

    - (void)removeObject:(id)anObject inRange:(NSRange)range;设置在一定范围内删除,如果在这个范围内没有匹配的元素则什么都不删除。

    - (void)removeObject:(id)anObject;删除指定元素

    - (void)removeObjectsInArray:(NSArray *)otherArray;删除数组中指定的元素

    - (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;删除指定索引位置的元素

NSRange range=NSMakeRange(0, 2);
[mutItems removeObject:@"wang" inRange:range];
for (NSString *item in mutItems) {
    NSLog(@"----- %@",item);
}

    (5)替换数组元素内容

    - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 可以使用这个方法来替换某个索引位置的元素

[mutItems replaceObjectAtIndex:1 withObject:@"FFFFFFFFFFFFFF"];
        for(NSString *item in mutItems){
            NSLog(@"************ %@",item);
        }

    

  本文只是很初略的记录了学习的一些常用方法,NSArray和NSMutableArray 还提供了大量的其他方法,仍有待继续努力学习和使用!        

时间: 2024-09-22 11:53:28

Object C学习笔记11-数组的相关文章

JavaScript学习笔记之数组去重_javascript技巧

推荐阅读:JavaScript学习笔记之数组的增.删.改.查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于JavaScript数组相关的知识,趁此机会整理了一些有关于JavaScript数组去重的方法. 下面这些数组去重的方法是自己收集和整理的,如有不对希望指正文中不对之处. 双重循环去重 这个方法使用了两个for循环做遍历.整个思路是: 构建一个空数组用来存放去重后

JavaScript学习笔记之数组随机排序_javascript技巧

推荐阅读:JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组的增.删.改.查 JavaScript中提供了sort()和reverse()方法对数组项重新排序.但很多时候这两个方法无法满足我们实际业务的需求,比如说扑克牌游戏中的随机洗牌. 在这篇文章一起来学习如何完成上面这个示例的效果,以及一些有关于数组随机排序的相关知识. 在网上查了一下有关于数组随机排序的相关资料,都看到了Math.random()的身影.打开浏览器控制器,输入: Math.random() 从图

JavaScript学习笔记之数组求和方法_javascript技巧

推荐阅读:JavaScript学习笔记之数组的增.删.改.查 通过最近学习,越来越感觉JavaScript的强大与魅力之处,仅数组一个知识点就让我这样的初学者折腾了很久.折腾是折腾,但还是很有效果的,这几天的学习到的一些基本知识,就在自己的业务就用到了.顿感自信心爆棚,我也有一天能学会JavaScript. 别的不多说了,咱们今天一起来玩数组的求和,看看有哪些方法可以实现数组的求和. 数组方法 JavaScript中数组有很多种方法,下图能更好的向你阐述JavaScript有多少种方法,作用是啥

JavaScript学习笔记之数组的增、删、改、查_javascript技巧

在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 数组是JavaScript中常见的一个对象,它有一些经典的操作,比如数组的增.删.改.查.在这篇文章中主要整理这方面的相关操作方法. 增

Object C学习笔记17-动态判断和选择器

当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关内容. 首先还是和.NET先对比一下,.NET中存在一个关键字var ,这个估计用过.NET的都知道,除非没有接触过3.0以上版本的.在.NET中能够使用var来声明任何类型的局部变量,负责告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量.但是这里要注意的时var 并不是一

Object C学习笔记10-静态方法和静态属性

在.NET中我们静态使用的关键字static有着举足轻重的作用,static 方法可以不用实例化类实例就可以直接调用,static 属性也是如此.在Object C中也存在static关键字,今天的学习过程使用到了这个关键字,在这里记录一下static的使用. 在Object C的语法中声明后的static静态变量在其他类中是不能通过类名直接访问的,它的作用域只能是在声明的这个.m文件中 .不过可以调用这个类的方法间接的修改这个静态变量的值.对于Object C中的类使用和定义在前面已经做过相应

Object C学习笔记21-typedef用法

在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作用是给一个数据类型定义一个新的名称,这些类型报告内部数据类型,比如int,char 还有自定义类型struct,enum等. typedef一般有两个作用:(1) 给某种类型顶一个定义比较容易记的名字,相当于别名;(2)简化较为复杂的类型声明.   二. typedef的使用 1. 定义新类型 语法

API Demos 2.3 学习笔记 (11)-- Views-&amp;gt;Date Widgets

更多精彩内容,请点击阅读:<API Demos 2.3 学习笔记> Date Widgets大致可以分为两类,一类是弹出对话框类型的控件,包括DatePickerDialog(日期选择对话框控件)和TimePickerDialog(时间选择对话框控件):另一类就是内嵌类型的控件,包括DatePicker(日期选择窗口控件)和TimePicker(时间选择窗口控件).这些控件广泛应用在需要选择和记录时间信息的场合,例如:谷歌日历. 下面我们简单介绍下这四种控件的调用方法: 1.DatePicke

ruby学习笔记(11)--symbol与hash参数

symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001".object_id puts "0001".object_id puts "0001".object_id puts "0001".object_id 输出结果类似如下: 32088750320887303208871032088690 可以

Object C学习笔记15-协议(protocol)

在.NET中有接口的概念,接口主要用于定义规范,定义一个接口关键字使用interface.而在Object C 中@interface是用于定义一个类的,这个和.NET中有点差别.在Object C中有一个协议(protocol) 的概念,这个和.NET中的interface类似. 协议(Protocol) 在列出的方法在本类中并没有相应实现,而是别的类来实现这些方法,而定义协议必须使用protocol关键字.   一. 如何定义protocol的定义 如何使用XCode新建一个协议.h 文件