比较两个阵列

时间:2009-09-25 05:55:35

标签: iphone objective-c cocoa

我有两个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];

3 个答案:

答案 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)