NSArray - 检查对象是否在数组中?

时间:2010-02-16 13:28:41

标签: iphone iphone-sdk-3.0 nsmutablearray nsarray

我有2个数组。一个是600个对象的大型静态组,另一个是10个对象的小组。

我想在两组之间采用任何常见对象并将它们放在一个新数组中。

因此,假设大组包含600个名为1到600的对象。较小的组包含9个对象:1,2,3,4,5,6,a,b,c。我希望能够创建一个包含对象1,2,3,4,5,6的新数组。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:10)

您确定需要NSArray吗?对于交叉点,最好使用NSSet s。有关NSArrays和NSSet使用的更多信息,请参阅Cocoa with Love: NSArray or NSSet, NSDictionary or NSMapTable

如果您使用NSSet,则必须创建一个新的NSMutableSet,其方法为intersectSet:,可用于您的目的:

NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", nil];
NSMutableSet *set2 = [[NSMutableSet alloc] initWithObjects:@"2", @"4", @"6", @"8", @"10", @"12", @"14", @"18", nil];

NSLog(@"set1: %@", set1);
NSLog(@"set2: %@", set2);
[set1 intersectSet:set2];
NSLog(@"isec: %@", set1);

您可以使用NSMutableSet方法从NSArray创建addObjectsFromArray:

NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", nil];
NSMutableSet *set = [[NSMutableSet alloc] init];
[set addObjectsFromArray:array];

您也可以使用NSArray方法过滤filterUsingPredicate:,但我从未使用过NSPredicate,因此这只是一个假设。

答案 1 :(得分:5)

最简单(但不一定是最快的(?))方式就像

NSMutableSet *intersection = [NSMutableSet setWithArray:smallArray];
[intersection intersectSet:[NSSet setWithArray:bigArray];
NSArray *result = [NSArray arrayWithSet:intersection];

但是,您必须再次对结果数组进行排序。

答案 2 :(得分:0)

您可以使用NSPredicate。我希望这篇文章可以帮助你开始......

http://marcocattai.posterous.com/nsarray-nspredicate-filter