Zac*_*man 2 iphone nsmutablearray nsarray iphone-sdk-3.0
我有2个阵列.一个是600个对象的大型静态组,另一个是10个对象的小组.
我想在两个组之间采用任何常见对象并将它们放在一个新数组中.
因此,假设大组包含600个名为1到600的对象.较小的组包含9个对象:1,2,3,4,5,6,a,b,c.我希望能够创建一个包含对象1,2,3,4,5,6的新数组.
做这个的最好方式是什么?
Com*_*Vie 10
你确定你需要NSArrays吗?对于十字路口,最好使用NSSets.有关NSArrays和NSSet的使用的更多信息,请参阅Cocoa with Love:NSArray或NSSet,NSDictionary或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);
Run Code Online (Sandbox Code Playgroud)
您可以创建一个NSMutableSet从NSArray使用addObjectsFromArray:方法:
NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", nil];
NSMutableSet *set = [[NSMutableSet alloc] init];
[set addObjectsFromArray:array];
Run Code Online (Sandbox Code Playgroud)
可能你也可以过滤NSArray使用filterUsingPredicate:方法,但是我从未使用过NSPredicates,因此这只是一个假设.
最简单的(但不一定是最快的(?))方式就是这样的
NSMutableSet *intersection = [NSMutableSet setWithArray:smallArray];
[intersection intersectSet:[NSSet setWithArray:bigArray];
NSArray *result = [NSArray arrayWithSet:intersection];
Run Code Online (Sandbox Code Playgroud)
但是,您必须再次对生成的数组进行排序.
| 归档时间: |
|
| 查看次数: |
10662 次 |
| 最近记录: |