Sno*_*man 3 collections cocoa objective-c
说我有一个对象someObject和一个NSMutableArray *someArray.我不确定是否someObject在数组中,但如果是,我想删除它.有两种选择:
情况1:
if([someArray indexOfObject:someObject] != NSNotFound)
[someArray removeObject:someObject];
Run Code Online (Sandbox Code Playgroud)
案例2:
[someArray removeObject:someObject];
Run Code Online (Sandbox Code Playgroud)
在情况2中,如果数组中不存在该对象,则不会发生任何事情.我的问题是,案例2是否更有效,因为在案例1中我必须搜索数组并查看它是否存在,如果存在,我将其删除,但我猜测removeObject:再次搜索该数组的对象?
但我猜是removeObject:再次搜索该对象的数组?
嗯,是的,它必须.没有找到它就无法在集合中找到对象.*文档甚至会这样说:
此方法用于
indexOfObject:定位匹配,然后使用删除它们removeObjectAtIndex:.[...]如果数组不包含anObject,则该方法无效(尽管它确实会产生搜索内容的开销).
您当然可以模仿框架,并removeObjectAtIndex:在搜索后立即使用自己.
*这比它可能更快(最坏的是O(log(N))而不是O(N)),因为NSArrays 不是数组.
好吧,你的数组不会记住你搜索过的每个对象.如果由于某种原因你需要知道它是否在你删除它之前,你可以避免双重搜索
NSUInteger tempIndex = [someArray indexOfObject:someObject];
if (tempIndex != NSNotFound)
[someArray removeObjectAtIndex:tempIndex]
else
//in case it wasn't found...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |