2011-10-06 182 views
2

我有一个包含CMTime对象的3 NSMutableArray对象。我怎样才能以一种有效的方式遍历所有三个值,并找出所有三个值是否有重复值?例如,我正在迭代一次并读取值并将其存储在x中。现在,我想看看x是否在其他两个阵列中出现(在任何位置)。我试图寻找一个contains方法,但找不到一个。我确实碰到过filterUsingPredicate,但我不确定这是否是实现它的最佳方式,也不知道如何实际使用谓词。检查NSMutableArray是否包含来自另一个阵列的值

+0

是否可以使用集合而不是数组? – Icydog

+0

我可以做,但这意味着重构代码的一部分,并最终需要将其转换回数组以与第三方方法一起工作,这可能会使其效率低下。我认为fluchtpunkt的方法应该没问题。 – XSL

回答

10

我试过寻找一个包含方法,但找不到一个。

使用indexOfObject:

这样的:

if ([array indexOfObject:object] != NSNotFound) { 
    // object found 
} 
else { 
    // object not found 
} 
+0

谢谢,这就是我需要的。将在几分钟内接受。 – XSL

1

可以代替你失踪contains方法的使用([yourArray indexOfObject:x] != NSNotFound)。但是,如果您正在快速,经常或使用很多元素执行此操作,则应考虑使用NSMutableOrderedSet,它的订购方式类似于NSMutableArray,但它提供了一种快速高效的方法,并允许快速操作,如联合和交叉,这可能允许您重新设计算法,以更少地遍历元素。

+1

我会尝试'indexOf'方法,看看它是否成为性能瓶颈。如果是这样,我将它与Set进行比较,看看数组和集之间的交换是否更快(因为我需要最终的输出是一个数组,以便它可以在第三方API中使用)。 – XSL

+1

非常明智;不要过早地优化。转换为'NSArray'应该很快。有一个'array'方法返回一个反映原始文件变化的代理,这很酷。 – andyvn22

+0

感谢您的信息。我对ObjC很陌生,所以找到所有这些方法都非常有帮助。 – XSL

相关问题