Как я могу проверить, находится ли значение в меньшем массиве в большем массиве? - PullRequest
0 голосов
/ 17 августа 2011

У меня есть два массива:

символов - меньший массив fetchedSymbolsArray - массив большего размера

Как проверить, находится ли содержимое в символах внутри fetchedSymbolsArray?

Предположим,

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

Я хочу проверить наличие дубликатов, а затем добавить любые дополнительные элементы в fetchedSymbolsArray обратно в символы. В этом случае MSFT будет добавлен.

Ответы [ 3 ]

0 голосов
/ 17 августа 2011
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 голосов
/ 17 августа 2011

попробуйте это.

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

При этом используется - (BOOL) содержитObject: (id) anObject вместо - [indexObObject:].

0 голосов
/ 17 августа 2011

Вы можете использовать метод 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;

Конечно, это можно улучшить, используя быстрое перечисление или другие приемы в зависимости от объектов в массивах, отсортированы ли они и т. Д..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...