我有两个数组:
NSMutableArray *web = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableArray *disk = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",nil];
在比较两个数组后,我想创建一个名为remArray
的数组,其中包含磁盘阵列中但不存在于Web数组中的对象(在本例中为字符串“1”)。
然后我想创建一个名为addArray
的数组,其中包含Web数组中但不存在于磁盘数组中的对象(在本例中为字符串“4”)。
是否有一种简单的方法可以在没有太多开销的情况下完成此操作?
答案 0 :(得分:5)
优于NSArray,您可以使用NSSet
使用NSMutableSet,您可以从另一组中删除对象:
- (void)minusSet:(NSSet *)otherSet
您的代码可以是:
NSMutableSet *web = [[NSMutableSet alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableSet *disk = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3",nil];
NSMutableSet * remArray = [[NSMutableSet setWithSet:disk] minusSet:web];
NSMutableSet * addArray = [[NSMutableSet setWithSet:web] minusSet:disk];
您还可以阅读Collections Programming Topics指南。在使用数组之前,您必须确定是否需要有序集合。
答案 1 :(得分:2)
您可以使用removeObjectsInArray方法:
NSMutableArray * remArray = [NSMutableArray arrayWithArray:disk];
[remArray removeObjectsInArray:web];
切换磁盘和web以获取addArray。
答案 2 :(得分:1)
我不知道有什么简单的方法,但滚动你的“差异”方法并不太难。
以下内容应该有效:
- (NSArray *) differnceBetween: (NSArray *) array1 and: (NSArray *) array2 {
NSMutableArray *difference = [[NSMutableArray alloc] init];
for(id obj in array1) {
if(![array2 contains:obj]) {
[differnce addObject:obj];
}
}
return difference;
}