文档章节

数组的简单方法

Matsonga
 Matsonga
发布于 2016/03/03 20:01
字数 993
阅读 30
收藏 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、使用...

隔壁张小二
2018/07/31
0
0
怎样使你的 JavaScript 代码简单易读

翻译:疯狂的技术宅 medium.freecodecamp.org/how-to-keep… 解决一个问题可以有很多方法,但是有些方法很复杂,甚至有些是荒谬的。在本文中,我想谈谈解决一个问题时的好方案和坏方案。 #1...

前端先锋
04/10
0
0
ECMAScript 中的Array类型

前言 类型是除了类型之外又是一个特别经常用的一个类型了,当然数组在其他的语言中都是不可缺少的属性,我们都知道不管还是其他类的语言的数组都是数据的有序列表,但是在中的数组是有一定的...

切图仔ice
06/09
0
0
这一次 彻底搞懂Vue针对数组和双向绑定(MVVM)的处理方式

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

wangweianger
2018/05/12
0
0
JavaScript经典面试题-深拷贝与浅拷贝

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

卟想苌亣
2017/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
34
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
38
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
53
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部