Objective-C - 如何比较数组并提取差异?

时间:2009-10-30 11:07:04

标签: objective-c arrays

  

可能重复comparing-two-arrays

我有两个NSArray,我想用第二个数组中的对象创建一个新数组,但不是 包含在第一个数组中。

Example:

NSMutableArray *firstArray = [NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melissa", nil];
NSMutableArray *secondArray = [NSMutableArray arrayWithObjects:@"Bill", @"Paul", nil];

The resulting array should be: 

[@"Paul", nil];

我通过双循环将对象与内部对象进行比较来解决这个问题。

有更好的解决方案吗?

3 个答案:

答案 0 :(得分:100)

[secondArray removeObjectsInArray:firstArray];

这个想法取自another answer

答案 1 :(得分:10)

如果数组中的重复项很重要,您可以使用minusSet:的{​​{1}}操作:

NSMutableSet

答案 2 :(得分:1)

我想比较来自两个NSArray的图像。 One Array,我是从Core Database获得的。其次我有常量数组对象。

我想知道第二个数组的对象是否存在于Core数据库中。

这是我用过的代码。

// All object from core data and take into array.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"student"];

NSArray *dbresult = [[NSArray alloc]init];
NSError *error;
@try {
    dbresult = [context executeFetchRequest:fetchRequest error:&error];
}
@catch (NSException *exception) {
    NSString *logerror = [NSString stringWithFormat:@"error in fetching Rooms from coredata = %@",exception.description];
NSLog(logerror)
}
@finally {
}

/*
 Get Unused images from list
 */

NSMutableArray *usedImages = [dbresult valueForKey:@"roomImageLocalPath"];

NSMutableSet *fSet = [NSMutableSet setWithArray:usedImages];
NSMutableSet *sSet = [NSMutableSet setWithCapacity:[newImages count]];
[sSet addObjectsFromArray:newImages];
[sSet minusSet:fSet];

NSArray *unusedImages = [secondSet allObjects];
NSLog(@"unusedImages %@",unusedImages);