【问题标题】:How to determine an array index in Objective C?如何确定Objective C中的数组索引?
【发布时间】:2009-07-16 02:02:41
【问题描述】:

我在 Objective C 中有两个数组,我需要找出某个索引是什么,以便将它插入到同一个位置。例如,假设我有一个“名称数组”和一个“年龄数组”。如何找出“名称数组”中的索引“charlie”,以便知道在“年龄”数组中插入他的年龄的位置?

谢谢

【问题讨论】:

    标签: objective-c cocoa search nsmutablearray nsarray


    【解决方案1】:

    -[NSArray indexOfObject:] 似乎是合乎逻辑的选择。

    【讨论】:

    • 是的,它会卡住,谢谢,我在 NSMutableArray 类参考中找不到。
    • 是的,NSMutableArray 文档仅包含与变异数组有关的方法。查看超类文档总是值得的。
    • 文档让人们很容易忘记检查继承的方法、ivars 和属性。给自己买一份 Andy Lee 的 AppKiDo 应用程序,你会更容易看到你可能缺少什么。当您以新的眼光看待某些课程时,它们会更容易理解。
    【解决方案2】:

    在 Cocoa 中,并行数组是通往厄运和毁灭的道路。您不能通过 Bindings 有效地使用它们,因此您将不得不编写大量的胶水代码,就好像 Bindings 不存在一样。此外,在您开始实施之前,您可能打算拥有任何未来的 AppleScript/Scripting Bridge 支持。

    正确的方法是创建一个具有nameage 属性的模型类,并拥有该类的单个实例数组。然后,要按名称或年龄查找项目,请使用NSPredicate 过滤数组,并使用indexOfObjectIdenticalTo: 从主数组中的过滤数组中查找每个项目的索引。

    indexOfObject:indexOfObjectIdenticalTo: 的区别在于前者会发送isEqual: 消息来判断每个对象是否是它要查找的对象,而后者只会查找您传入的特定对象。因此,您可以将indexOfObject: 与不在数组中但等于一个的对象一起使用,以便在数组中找到相等的对象。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这很好。人们经常忽略这样一个事实,即在数组中搜索给定字符串需要线性时间,而在字典中搜索字符串需要恒定时间。 Chuck 关于如何为数组执行此操作是正确的,但基于稀疏描述,字典似乎是一个很好的潜在解决方案。
      • 即便如此,值得记住的是,如果常数大或线短,线性时间可能比常数时间快。基本上,在您通过测量确认它确实是一个性能问题之前,不要担心它。
      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      相关资源
      最近更新 更多