我有两个数组:
NSMutableArray *web = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"4",nil];
NSMutableArray *disk = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",nil];在比较两个数组之后,我想创建一个名为remArray的数组,其中包含存在于磁盘阵列中但不存在于web阵列中的对象(在本例中为字符串"1“)。
然后,我想创建一个名为addArray的数组,其中包含存在于web数组中但不存在于磁盘阵列中的对象(在本例中为字符串"4“)。
有没有一种简单的方法可以在不增加太多开销的情况下做到这一点?
发布于 2011-10-14 22:58:47
您可以使用NSSet,它比NSArray更好
使用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指南。在使用数组之前,您必须确定是否需要有序集合。
发布于 2011-10-14 23:11:00
您可以使用removeObjectsInArray方法:
NSMutableArray * remArray = [NSMutableArray arrayWithArray:disk];
[remArray removeObjectsInArray:web];执行相同的操作,切换磁盘和web以获取addArray。
发布于 2011-10-14 22:58:46
我不知道有什么真正简单的方法,但滚动你的“差异”方法并不太难。
下面的内容应该是可行的:
- (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;
}https://stackoverflow.com/questions/7769330
复制相似问题