2011-10-06 178 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

相關問題