如何检查较小数组中的值是否在较大的数组中?

时间:2011-08-16 22:36:27

标签: objective-c arrays algorithm search

我有两个数组:

符号 - 较小的数组 fetchedSymbolsArray - 更大的数组

如何检查符号中的内容是否也在fetchedSymbolsArray中?

让我们假设

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

我想查看是否有重复项,然后将fetchedSymbolsArray中的任何其他元素添加回符号中。在这种情况下,将添加MSFT。

3 个答案:

答案 0 :(得分: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;

当然,这可以使用快速枚举或其他技巧来改进,具体取决于数组中的对象,它们是否已排序等。

答案 1 :(得分: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);
    }
} 

答案 2 :(得分:0)

试试这个。

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

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