NSMutableArray 删除可变数组元素
平时使用 NSMutableArray
中经常用到遍历删除数组元素的问题。
一般第一个想法是使用一下 forin
就解决了,但是老司机都会知道使用 forin
做删除操作的时候会 crash。
报错的原因是:
当数组在枚举的时候被修改了,因为数组规定在
forin
遍历的时候不能修改数组元素。
但是有一种特殊情况,就是在删除数组最后一个元素的时候可以使用forin
,因为到最后一个元素的时候forin
枚举已经结束了,这时候删除元素不会影响到forin
工作。
NSMutableArray *nameArray = @[@"1", @"2", @"3", @"4"];
使用倒序forin
删除元素
//创建逆序遍历
NSEnumerator *enume = [nameArray reverseObjectEnumerator];
for (NSString *name in enumerator) {
if ([name isEqualToString:@"2"]) {
[array removeObject:name];
}
}
使用 for 循环进行遍历删除
遍历整个数组,找到对应的元素,然后执行删除操作
for (int i = 0; i < count; ++i) {
NSString *name = nameArray[i];
if ([name isEqualToString:@"2"]) {
nameArray removeObject:name];
}
}
还有一种方式是定义一个副本数组,对这个副本数组进行遍历,在原数组中进行删除操作
NSMutableArray *copyNameArray = [NSMutableArray arrayWithArray:nameArray];
for (NSString *name in copyNameArray) {
if ([name isEqualToString:@"2"]) {
[nameArray removeObject:name];
}
}
NSMutableArray 删除可变数组元素的更多相关文章
- jQuery根据元素值或元素下标来删除一个数组元素及数组对象方法列表
在前提不知道b在这个数组的下标,删除b这个元素 var arrList = ['a','b','c','d']; arrList.splice(jQuery.inArray('b', ...
- 几种php 删除数组元素方法
几种php教程 删除数组元素方法在很多情况下我们的数组会出现重复情况,那我们删除数组中一些重复的内容怎么办,这些元素我必须保持他唯一,所以就想办法来删除它们,下面利用了遍历查询来删除重复数组元素的几种 ...
- 删除php数组中的元素
删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: <?php $array = array(0 => "a", 1 => "b&qu ...
- js中数组元素的添加和删除
js中数组元素常用添加方法是直接添加.push方法以及unshift方法 删除方法则是delete.pop.shift 集修改方法为一身的则是splice 1.添加: (1)直接添加通常都是这样 va ...
- js怎么删除数组元素,有哪些删除元素方法
JavaScript删除元素方法 1.根据索引删除数组元素 delete 数组[索引] *注意delete 后面是空格 var arr1=["aa","bb" ...
- Objective - C NSArray不可变数组和NSMutableArray可变数组
OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见 ...
- NSArray与NSMutableArray 数组与可变数组
1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组.2.NSArray的创建NSArray * array = [[NSArray alloc]initWith ...
- 【转】不可变数组NSArray与可变数组NSMutableArray
原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; ...
- NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习
1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组. 2.NSArray的创建 NSArray * array = [[NSArray alloc]initWi ...
随机推荐
- Java编程思想之五初始化与清理
随着计算机革命的发展,"不安全"的编程方式已经逐渐称为编程代价高昂的主因之一. 初始化和清理正是涉及安全的两个问题. 5.1 用构造器确保初始化 通过提供构造器,类的设计者可确保每 ...
- Linux文件系统被占用,磁盘使用量与实际不一致【转】
用lsof检查后才发现原因是,有文件被删除,而进程还活着,因而造成还占用空间的现象 [root@/]# lsof |grep delete 根据lsof列出的进程号,kill这些进程后,空间就释放出来 ...
- 解决启动redis出现的creating server tcp listening socket *:6379: listen: unknown error
今天运行redis服务端时候出现这个问题: D:\php\software\redis>redis-server.exe [] Dec ::00.797 # Warning: no config ...
- 关于uboot中的属性"u-boot,dm-pre-reloc”的意义
"u-boot,dm-pre-reloc”属性:当设置了这个属性时,则表示这个设备在重定向之前就需要使用. 当dm_init_and_scan的参数为true时,只会对带有“u-boot,d ...
- Data truncation: Out of range value for column 'quanity' at row 问题解决方案
由于之前在自己电脑上搭建了mysql 5.6的数据库,但是在服务器上搭建的是mysql 5.7的环境,在运行过程中出现了如下错误: Data truncation: Out of range valu ...
- [原]JSON 字符串(值)做判断,比较 “string ”
现在我这样一个json字符串: char* cjson = "{\"code\": \"200\", \"code2\": 200 ...
- django在centos生产环境的部署
# 安装数据库和web服务器nginx # yum install –y nginx mariadb-server # 安装虚拟环境 pip install virtualenv pip instal ...
- 浅入深出ETCD之【集群部署与golang客户端使用】
前言 之前说了etcd的简介,命令行使用,一些基本原理.这次来说说现实一点的集群部署和golang版本的客户端使用.因为在实际使用过程中,etcd的节点肯定是需要2N+1个进行部署的,所以有必要说明一 ...
- exe4j 打包jar包程序,inno setup complier打包所有
关于库: jar包中对于引用第三方库的话,需要再exe4j中引用. rxtx http://rxtx.qbang.org/wiki/index.php/Download
- FileHelper-文件操作工具
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...