NSArray - check if objects are in an array?

后端 未结 3 1456
北荒
北荒 2020-12-21 16:20

I have 2 arrays. One is a large static group of 600 objects, the other is a small varying group of 10 objects.

I want to take any common objects between the two grou

相关标签:
3条回答
  • 2020-12-21 16:44

    You could use NSPredicate. I hope that this post could be usefull to start...

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

    0 讨论(0)
  • 2020-12-21 16:52

    The easiest (but not necessarily fastest (?)) way would be something like

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

    You'll have to sort the resulting array again, however.

    0 讨论(0)
  • 2020-12-21 16:58

    Are you sure that you need NSArrays? For intersections it would be better to use NSSets. For more information about the usage of NSArrays and NSSet please refer to Cocoa with Love: NSArray or NSSet, NSDictionary or NSMapTable.

    If you are using NSSet you have to create a new NSMutableSet, which has the method intersectSet:, which can be used for your purpose:

    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);
    

    You can create a NSMutableSet from an NSArray using the addObjectsFromArray: method:

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

    It may be that you can also filter the NSArray using the filterUsingPredicate: method, however I have never worked with NSPredicates therefore this is only an assumption.

    0 讨论(0)
提交回复
热议问题