文档章节

数组的简单方法

Matsonga
 Matsonga
发布于 2016/03/03 20:01
字数 993
阅读 29
收藏 0

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


© 著作权归作者所有

共有 人打赏支持
Matsonga
粉丝 0
博文 17
码字总数 8857
作品 0
大连
程序员
私信 提问
慎用JS中的slice()、concat()和assign()方法来复制数组

一、原数组里的数据不包含引用类型 1、使用 slice() 方法 拷贝数组: 修改经过 slice() 拷贝过的新数组: 结论:使用 slice() 方法拷贝数组,然后修改新数组,不会影响到旧数组的值。 2、使用...

隔壁张小二
07/31
0
0
这一次 彻底搞懂Vue针对数组和双向绑定(MVVM)的处理方式

欢迎关注我的博客:github.com/wangweiange… Vue内部实现了一组观察数组的变异方法,例如:push(),pop(),shift()等。 Object.definePropert只能把对象属性改为getter/setter,而对于数组的...

wangweianger
05/12
0
0
用js来实现那些数据结构02(数组篇02-数组方法)

    上一篇文章简单的介绍了一下js的类型,以及数组的增删方法。这一篇文章,我们一起来看看数组还有哪些用法,以及在实际工作中我们可以用这些方法来做些什么。由于其中有部分内容并不常...

zaking
04/10
0
0
JavaScript经典面试题-深拷贝与浅拷贝

前言 拷贝也是面试经典呐! 数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice、concat 返回一个新数组的特性来实现拷贝。 比如: 用 slice 可以这样做: 但是如果数组嵌套了...

卟想苌亣
2017/11/19
0
0
【算法和数据结构】分治思想之二分查找(C++实现)

分治思想举例:二分查找 在上一篇文章中简单地分享了分治 的思想方法,并用快速排序和归并排序做了简单的示例。下面我们以一个更加简单直接的例子来简单的介绍下分治思想的方法–二分查找。 ...

qq_28869927
2017/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
1
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
4
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
3
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部