2011-08-16 106 views
0

我有兩個數組:如何檢查較小陣列中的值是否在較大陣列中?

符號 - 小陣 fetchedSymbolsArray - 更大的陣列

我如何檢查,看看是否在符號的內容也fetchedSymbolsArray裏面?

讓我們假設

symbols = ["AAPL", "GOOG", "YHOO"]; 
fetchedSymbolsArray = ["AAPL", "GOOG", "YHOO", "MSFT"]; 

我要檢查,看看重複項,然後添加在fetchedSymbolsArray任何額外的元素放回符號。在這種情況下,MSFT將被添加。

+0

問題在哪裏?效率? – Vlad

+2

你需要更具體。你想檢查小陣列中的所有項目是否在更大的陣列中?訂單是否重要?你有什麼嘗試? – svick

+0

已更新問題 –

回答

0

試試這個。

BOOL contentIsInLargerArray = NO; 
for (id *object in symbols) { 
    if ([fetchedSymbolsArray containsObject:object]) 
     contentIsInLargerArray = YES; 
} 
return contentIsInLargerArray; 

這使用 - (BOOL)containsObject:(id)anObject而不是 - [indexObObject:]。

0

可以使用NSArray方法

- (NSUInteger)indexOfObject:(id)anObject 

來測試陣列是否具有一定的對象。如果不是,則返回結果將爲NSNotFound。這是一個簡單的方法來檢查,如果一個數組是另一個的子集:

NSUInteger index; 
for (int i=0; i<[symbols count]; ++i) { 
    index = [fetchedSymbolsArray indexOfObject:[symbols objectAtIndex:i]]; 
    if (index == NSNotFound) { 
     return NO; 
    } 
} 
return YES; 

當然,這可以通過使用快速列舉或根據在數組中的對象,無論是分類其他技巧等

得到改善
0
for (int i = 0; i<[symbols count]; i++) { 
    id myObj = [symbols objectAtIndex:i]; // I set id because type is unknown 
    if ([fetchedSymbolsArray indexOfObject:myObj] != NSNotFound) { 
     NSLog(@"Object %@ found in fetched symbols", myObj); 
    } 
} 
+0

這隻能檢查符號數。如果fetchedSymbolsArray較大,可能會有一些額外的元素沒有得到比較。 –

+1

然後反過來做。 –