在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:]);

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

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

for(int i=;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:];

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

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

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

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

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

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:];
[mutItems addObject:@"abc"];
[mutItems addObject:@"def"];
[mutItems addObject:@""];
NSLog(@"%d",[mutItems count]); [mutItems insertObject:@"wang" atIndex:];
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(, );
[mutItems removeObject:@"wang" inRange:range];
for (NSString *item in mutItems) {
NSLog(@"----- %@",item);
}

    (5)替换数组元素内容

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

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

    

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

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

  1. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  2. Object C学习笔记24-关键字总结

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  3. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

  4. PHP学习笔记之数组篇

    摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇   一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...

  5. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  6. Object C学习笔记24-关键字总结(转)

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  7. 并发编程学习笔记(11)----FutureTask的使用及实现

    1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...

  8. Object C学习笔记22-#define 用法

    上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...

  9. Object C学习笔记21-typedef用法

    在上一章的学习过程中遇到了一个关键字typedef,这个关键字是C语言中的关键字,因为Object C是C的扩展同样也是支持typedef的. 一. 基本作用 typedef是C中的关键字,它的主要作 ...

  10. Object C学习笔记18-SEL,@ selector,Class,@class

    本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,所以比较简单点. 一. SEL 类型 在上一篇介绍了几个方法,都只是介绍了其使用方式但是没有具体 ...

随机推荐

  1. 一、HTML概述 二、web相关的概念 三、HTML的常用标签

    一.HTML概述###<1>概念 HTML:Hypertext Markup Language,超文本 标记语言,用来描述网页的一种语言. 非编程语言,由浏览器直接解释运行. ###< ...

  2. November 7th 2016 Week 46th Monday

    A friend is one who knows you and loves you just the same. 朋友是懂你并爱你的人. Friendship means inclusion, l ...

  3. Substring Search

    查找子字符串 Introduction 在长度为 N 的文本里寻找长度为 M 的模式(子串),典型情况是 N >> M. 这个应用就很广泛啦,在文本中寻找特定的模式(子串)是很常见的需求. ...

  4. 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”

    import java.util.ArrayList; import java.util.Scanner; public class Text { @SuppressWarnings("re ...

  5. wk_10.md

    Python检测和处理异常 try-except语句 try-except语句定义了进行异常监控的一段代码,并且提供了异常处理的机制,下面是使用的语法: try: # 可能抛出异常的语句,会一直执行, ...

  6. grep命令.md

    grep命令 简介 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Prin ...

  7. Golang context包解读

    Context 通常被译作 上下文 ,一般理解为程序单元的一个运行状态.现场.快照,而翻译中 上下 又很好地诠释了其本质,上下上下则是存在上下层的传递, 上 会把内容传递给 下 . 在Go语言中,程序 ...

  8. 1001. [BJOI2006]狼抓兔子【最小割】

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  9. hacknet

    网盘下载地址,下载后cmd运行hacknet.exe 链接:https://pan.baidu.com/s/1gTrcuDRzDhepFlXhsOMVlg 提取码:os9v 经过5个小时的战斗,终于通 ...

  10. orge资源

    1.  OGRE官网 http://www.ogre3d.org (重要) 2.  OGRE WIKI  http://www.ogre3d.org/wiki/index.php/Main_Page( ...