PSA: 从数组移除对象

简介:

PSA: Removing objects from arrays

  1. 你创建一个NSMutableArray.
  2. 两次添加相同一个对象到数组中
  3. 向数组发送removeObjectIdenticalTo: 消息, 传入你所添加的对象

数组的count是多少?

如果你说1, 你就错了(you’re wrong).

更糟的是,你可能会认为和addObject相反是removeObject:(尤其是如果你从来没有听说过... IdenticalTo:的版本),但那更错了:removeObject:通过测试相等(向它们发送isEqual:消息)找到对象(们),删除,而不是简单地寻找你传入的对象。这意味着它可能会删除不是你传入的对象,但它都是相同的。所以,除非你真的要删除你拥有的任何一个相同的对象,你应该更喜欢removeObjectIdenticalTo:。

但是,仍然完全从数组删除对象,无论它存在几个。除非你真的想,你更??有可能想要这个:

NSUInteger IDX = myArray的indexOfObjectIdenticalTo:OBJ]; 
[myArray的removeObjectAtIndex:IDX];

即使是这样,将删除从您添加的首个对象而不是最后一个,所以如果你特别需要删除最后的那个,你把它添加(后进先出法,而不是先进先出),然后你需要倒序遍历枚举(enumerate the array backwards),计算的索引,通过索引中删除找到的对象后,最终跳出循环。

为了让这个简单和避免很可能在许多独立的实现中的一次次的解决错误,这里的一个类别(a category you can add to your projects),您可以添加到您的项目。在任何地方你需要?? - [NSMutableArray addObject:]的相反操作的地方使用。

但这对于set不要紧,因为它在相等的基础上欺骗的检查每一个对象。一个set,删除相等的对象和删除相同的对象,是同样的事情,这是为什么NSMutableSet没有removeObjectIdenticalTo。数组就不是这样的,这就是为什么NSMutableArray是这样的。










本文转自 arthurchen 51CTO博客,原文链接:http://blog.51cto.com/arthurchen/648950,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
|
13天前
使用范围函数来创建数组
在 Julia 中,可以使用省略号 `...` 或 `collect()` 函数创建数组。示例:`[0:10...]` 产生一个从 0 到 10 的整数向量。`collect(start:step:stop)` 允许自定义开始、步长和结束值,如 `collect(1:2:13)` 生成一个奇数向量。此外,`collect(element_type, range)` 可指定数组类型,如 `collect(Float64, 1:2:5)` 创建浮点型数组。
|
16天前
|
Python
使用arange()函数创建数组
使用arange()函数创建数组。
36 1
|
5月前
|
存储 JavaScript 前端开发
数组:数组是JS中的一种特殊对象,用于存储一组有序的数据。需要掌握数组的创建、访问、修改以及各种内置方法。
数组:数组是JS中的一种特殊对象,用于存储一组有序的数据。需要掌握数组的创建、访问、修改以及各种内置方法。
37 2
|
7月前
从数组对象格式的数组中删除指定对象
从数组对象格式的数组中删除指定对象
18 0
|
12月前
03.ES6数组对象展开(spread)
03.ES6数组对象展开(spread)
146 0
lodash遍历分配对象的属性,忽略相同属性的值
lodash遍历分配对象的属性,忽略相同属性的值
63 0
|
JSON 数据格式
如何判断两个对象/数组相等
如何判断两个对象/数组相等
|
JavaScript
DOM移除、替代、拷贝、遍历
DOM移除、替代、拷贝、遍历
62 0