我有两个NSArrays,我要做的是比较两个包含字符串的数组,找到相似之处并再次创建第一个数组,但它们没有相似之处。
仅举例如。
两个阵列:
NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil];
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];
结果:
NSArray *arrayOne = [NSArray arrayWithObjects:@"TD1", @"TD2", @"TD3", nil];
NSArray *arrayOneCopy = [NSArray arrayWithObjects:@"TD1", @"TD3", nil];
NSArray *arrayTwo = [NSArray arrayWithObjects:@"Blah", @"String", @"TD2", nil];
答案 0 :(得分:59)
NSMutableArray *arrayOneCopy = [NSMutableArray arrayWithArray:arrayOne];
[arrayOneCopy removeObjectsInArray:arrayTwo];
答案 1 :(得分:28)
使用NSMutableSet:
NSMutableSet *setOne = [NSMutableSet setWithArray: arrayOne];
NSMutableSet *setTwo = [NSMutableSet setWithArray: arrayTwo];
[setOne minusSet: setTwo];
NSArray *arrayOneResult = [setOne allObjects];
(严格来说,setTwo
不一定是可变的,也可以是NSSet
(表现更好))
或者使用NSArray作为对方的回答 - 这也有效。
哪一个完全取决于您的数据集大小。对于小型数据集,阵列解决方案工作正常。对于较大的集合,NSSet将更加高效,因为成员资格测试是哈希检查而不是线性搜索。
测量并使用效果最好的那个。
答案 2 :(得分:3)
- (NSInteger)countOfDifferentObjects:(NSArray *)anotherArray {
NSSet * s = [NSSet setWithArray:self];
NSMutableSet * s1 = [NSMutableSet setWithSet:s];
NSSet * s2 = [NSSet setWithArray:anotherArray];
[s1 unionSet:s2];
[s1 minusSet:s];
return [s1 count];
}
这将返回两个数组之间不同对象的数量(与isEqual比较)
array1 = @"A", @"B", @"C"
array2 = @"B", @"D", @"Z"
returns 2 (D and Z are different)