2011-08-16 13 views
0

私は、2つの配列があります。小さい配列の値が大きい配列にあるかどうかを確認するにはどうすればよいですか?

シンボル - 小さな配列 fetchedSymbolsArray - 大きな配列

どのように私は、シンボル内のコンテンツがfetchedSymbolsArrayの内側にもあるかどうかを確認することができますか?

は、私は重複を確認するためにチェックし、その後、バックシンボルにfetchedSymbolsArrayのいずれかの追加要素を追加したい

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

とさせて頂きます。この場合、MSFTが追加されます。

+0

問題はどこですか?効率? – Vlad

+2

より具体的にする必要があります。小さい配列のすべての項目がより大きな配列にあるかどうかチェックしますか?秩序は問題ですか?何を試しましたか? – svick

+0

更新された質問 –

答えて

0

これを試してください。

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

これは、 - [indexObObject:]の代わりに - (BOOL)containsObject:(id)anObjectを使用します。

0

あなたは、配列が特定の目的を持っているかどうかをテストするためにNSArray方法

- (NSUInteger)indexOfObject:(id)anObject 

を使用することができます。そうでない場合、戻り値はNSNotFoundになります。ここ1、配列が別のサブセットであるかどうかを確認するための簡単な方法です:もちろん

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

それから、逆にやりなさい。 –

関連する問題