如何在Objective C中确定一个数组的索引?

17

我在Objective C中有两个数组,需要查找某个元素所在的索引位置,以便将其插入到相同的位置。例如,假设我有一个“name数组”和一个“age数组”。如何查找“charlie”在“name数组”中的索引位置,以便知道在“age”数组中插入他的年龄的位置?

谢谢

3个回答

38

是的,它会删除,谢谢。我在NSMutableArray类参考中找不到它。 - Xcoder
4
是的,NSMutableArray文档仅包含与修改数组相关的方法。查看超类文档也是值得的。 - Chuck
1
文档很容易让人忘记检查继承的方法、实例变量和属性。获取 Andy Lee 的 AppKiDo 应用程序副本,将更容易看到您可能遗漏的内容。有些类在以新的方式查看时更容易理解。 - uchuugaka

6
在Cocoa中,平行数组是一条通往毁灭的道路。你无法有效地使用它们与绑定一起,因此你将不得不编写大量的粘合代码,就好像绑定不存在一样。此外,在实现之前,你已经扼杀了任何未来可能打算拥有的AppleScript/脚本桥支持。
正确的方法是创建一个带有“名称”和“年龄”属性的模型类,并拥有该类的单个实例数组。然后,使用NSPredicate过滤数组以按名称或年龄查找项目,并使用indexOfObjectIdenticalTo:在主数组中查找每个过滤数组中的项目的索引。 indexOfObject:indexOfObjectIdenticalTo:之间的区别在于前者将发送isEqual:消息以确定每个对象是否为正在查找的对象,而后者仅寻找您传递的特定对象。因此,您可以使用indexOfObject:与不在数组中但等于其中一个对象的对象一起使用,以便找到数组中相等的对象。

4
如果您基于字符串进行查找,您可能只需要使用NSDictionary。

这是一个很好的观点。人们经常忽视这样一个事实,即在数组中搜索给定字符串是线性时间,而在字典中搜索字符串是常数时间。Chuck对于如何处理数组是正确的,但根据简要说明,字典似乎是一个很好的潜在解决方案。 - Quinn Taylor
2
即便如此,值得记住的是,如果常数较大或线段较短,线性时间可能比常数时间更快。基本上,除非通过测量确认确实存在性能问题,否则不必担心它。 - Peter Hosey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接